Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полнотекстовый поиск 
:(
    Опции темы
Still
Дата 1.8.2012, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHP-программист
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



Добрый день!

Поиск работает по типу запроса: 

Код

SELECT `id`, `name`, `brand`, `price`, `content`, `code`, `article`, `article_index`, `image_url`, `page_url`, `site_group`, `preview_text`, `discontinued`, `badge_type`, `badge_text`, `badge_preview`, `quantity`, IF(`quantity`>0,1,0) available, ( 
    MATCH(`name`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) * 5 + 
    MATCH(`brand`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) + 
    MATCH(`code`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) + 
    MATCH(`article`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) + 
    MATCH(`content`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) * 2 + 
    MATCH(`site_group`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) * 6
) AS `relev` 

FROM `r_search_products` 

WHERE (
    MATCH(`name`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) OR 
    MATCH(`brand`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) OR 
    MATCH(`code`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) OR 
    MATCH(`article`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) OR 
    MATCH(`content`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) OR 
    MATCH(`site_group`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode)


ORDER BY `discontinued`, `available` DESC, `relev` DESC;

Используется полнотекстовый поиск.

Структура таблицы:
Код

CREATE TABLE `r_search_products` (
  `id` int(10) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `brand` varchar(50) DEFAULT NULL,
  `content` text,
  `price` decimal(10,0) DEFAULT NULL,
  `code` varchar(255) DEFAULT NULL,
  `article` varchar(255) DEFAULT NULL,
  `article_index` varchar(255) DEFAULT NULL,
  `discontinued` tinyint(1) NOT NULL,
  `page_url` varchar(255) NOT NULL,
  `image_url` varchar(255) DEFAULT NULL,
  `site_group` varchar(255) NOT NULL,
  `preview_text` text NOT NULL,
  `badge_type` varchar(50) DEFAULT NULL,
  `badge_text` text,
  `badge_preview` text,
  `quantity` int(10) DEFAULT NULL,
  UNIQUE KEY `id` (`id`),
  KEY `discontinued` (`discontinued`),
  FULLTEXT KEY `search_code` (`code`),
  FULLTEXT KEY `search_name` (`name`),
  FULLTEXT KEY `search_content` (`content`),
  FULLTEXT KEY `search_brand` (`brand`),
  FULLTEXT KEY `search_site_group` (`site_group`),
  FULLTEXT KEY `search_article` (`article`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


Выполняется запрос (в не зависимости от данных внутри) примерно 3,5 сек.
Пробовал и дополнительные комбинированные ключи, и типы полей. Не помогает.

Как его можно оптимизировать?

Заранее спасибо!
PM MAIL WWW   Вверх
Akina
Дата 1.8.2012, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



А где explain?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Still
Дата 8.8.2012, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHP-программист
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



EXPLAIN на вышеуказанные запрос.
user posted image
PM MAIL WWW   Вверх
Akina
Дата 8.8.2012, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Как изменится план, если оставить поиск только по одному полю?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Still
Дата 14.8.2012, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHP-программист
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



Запрос:
Код

SELECT `id`, `name`, `brand`, `price`, `content`, `code`, `article`, `image_url`, `page_url`, `site_group`, `preview_text`, `discontinued`, `badge_type`, `badge_text`, `badge_preview`, `quantity`, IF(`quantity`>0,1,0) available, ( 
    MATCH(`content`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode) * 2
) AS `relev` 
FROM `r_search_products` 
WHERE (
    MATCH(`content`) AGAINST('>>"pocketbook" >(+pocketbook*) <(pocketbook*)' in boolean mode)

ORDER BY `discontinued`, `available` DESC, `relev` DESC;


Explain:
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.