2016-03-28 5 views
1

У меня/был запрос mysql, который был довольно быстрым, используя, например,Альтернатива булевому ИЛИ в Сфинксе?

FieldA in (X,Y,Z) 

Я перешел на Сфинкс, который явно намного быстрее ИСКЛЮЧАЕТ, когда вы используете трубы в таком случае, например,

@(FieldA) (X|Y|Z) 

Где X | Y | Z на самом деле около 40 различных значений. MysQl In занимает 3,3 секунды, когда Сфинкс занимает минуту. Учитывая, насколько быстрее Sphinx доказал, что мне интересно, есть ли какая-то версия «IN» для Sphinx с несколькими значениями vs | что явно замедляет его.

ответ

0

Действительно, это зависит от множества вещей. Для некоторых запросов изменение использования MVA может быть лучше, чем использование ключевых слов. (у вас есть функция «IN»)

... особенно если у вас есть другие ключевые слова для поиска.

Полнотекстовое индексирование Sphinxes оптимизировано для ответа на короткие введенные пользователем запросы. Чтобы ответить на длинный запрос стиля OR, он должен загрузить и слить каждый список слов. И оценивайте все это. Все это наверху.

В то время как фильтрация на основе атрибутов, как правило, довольно быстра, если у вас есть очень избирательный запрос по ключевому слову, который дает относительно короткий список потенциальных совпадений.

+0

Спасибо, я посмотрел страницу MVA в документации, и пока это имеет некоторое значение для меня неопределенно, у меня возникает ощущение, что это плохое решение для меня в этом случае. Мне нужно было бы индексировать 100 с 1000 возможных возможностей, а затем 100 значений для каждого из них. Есть ли способ для того, чтобы объединить Sphinx Query с MySql? Поэтому я могу сделать, например, «from idx, где MATCH (« Appel ») и« из таблицы где в (1,2,3, .., N ')? – user3649739

+0

Ну, не уверен, что ему нужна MVA, только стандартное одно значение Атрибут было бы достаточно. Только одно значение для одного документа - нет, не может смешиваться и напрямую сочетаться с SPhinx и Mysql. Это совершенно разные системы – barryhunter