Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Sphinx и индексирование MySQL столбцов в базе
цитата
14/09/16 в 11:22
 S_Flash
Sphinx 2.2.9-id64

1) Подскажите, играет ли роль будут ли поля или атрибуты проиндексированы в самой MySQL для скорости работы Sphinx или достаточно только Primary индекса для того, чтоб сам Sphinx\sphinxapi мог быстро по этому индексу "прыгать" по базе при отдаче выборки?

2) Есть атрибут, который использую для фильтрации при запросе. Как известно какждый атрибут и каждый лишний накладывает свои расходы на скорость окончательного запроса. Отсюда:
а) нужно ли индексировать в самой MySQL столбец атрибута?
б) Что эфективнее закодировать атрибут числом, чтоб фильтровать его в таком виде Код:
$cl->SetFilter ( "forum_id", array ( 1,3,7 ) );

или можно сделать его более удобным для человека-понимания строковым (версия 2 это уже умеет), чтоб было
Код:
$cl->SetFilter ( "niche", array ( 'gay','shemale','lesbo' ) );

?
цитата
14/09/16 в 13:48
 lalex
S_Flash писал:
1) Подскажите, играет ли роль будут ли поля или атрибуты проиндексированы в самой MySQL для скорости работы Sphinx или достаточно только Primary индекса для того, чтоб сам Sphinx\sphinxapi мог быстро по этому индексу "прыгать" по базе при отдаче выборки?

Sphinx делает выборку документов пачками по первичному (primary) ключу. Остальные индексы роли не играют.

S_Flash писал:
2) Есть атрибут, который использую для фильтрации при запросе. Как известно какждый атрибут и каждый лишний накладывает свои расходы на скорость окончательного запроса. Отсюда:
а) нужно ли индексировать в самой MySQL столбец атрибута?
б) Что эфективнее закодировать атрибут числом, чтоб фильтровать его в таком виде

Атрибуты как раз ускоряют окончательный запрос. При наличии фильтра по атрибуту, Sphinx сначала выделяет документы, которые проходят по этому фильтру, а уже затем делает по ним полнотекстовый поиск. Соответственно, чем меньше останется документов после фильтра по атрибутам, тем быстрее будет выполнен поиск.
а) см. выше про primary индекс. Структура исходной таблицы MySQL не влияет на поиск.
б) при индексации атрибутов Sphinx создает свой словарь, поэтому нет смысла кодировать исходные значения.
цитата
14/09/16 в 14:48
 S_Flash
lalex:
А не вкурсе, такой синтаксис сейчас работает в sphinxapi.php:
Код:
$cl->SetFilter ( "niche", array ( 'gay','shemale','lesbo' ) );

? (Именно массив, с строковыми атрибутами)
В документации только целочисленные индексы в примерах.


Эта страница в полной версии