2016-10-20 7 views
2

У меня очень эффективный запрос Sphinx, работающий на столе. Однако часть запроса unfortunatley требует большого оператора «OR», состоящего из 100 вариантов. Sphinx давитсяОбъединить запросы Mysql и Sphinx?

@(field) (1|2|..|800)

довольно плохо с тех пор, как одна минута, а тот же запрос, труба в Mysql занимает < 1 секунда ли делать

field in (1,2,..,800

или даже

Field =1 or Field=2 or Field=... or Field=800.

Есть ли способ объединить оба в одном запросе?

ответ

0

Sphinx может делать in(..) запросов на ATTRIBUTE.

Наверное, не так эффективно, как MySQL (по крайней мере, если индексируется столбец)

sphinxQL> SELECT * FROM index WHERE MATCH('...') AND attrib IN (1,2,...) 
+0

Я предполагаю, что будет более эффективным, чем выполнение '@ (field) (1 | 2 | ...)'? Я пытаюсь проверить здесь, но в то время как 'attribname = '1'' works' attribname in (' 1 ', 2', ...) 'дает мне ошибку" [Err] 1064 - sphinxql: синтаксическая ошибка, неожиданный QUOTED_STRING, ожидая CONST_INT или '-' рядом '' 1 ',' 2 ')' " – user3649739

+0

Я думаю, мне нужно изменить свой тип атрибута, я отчитаю извините. – user3649739

+0

Как только я исправил тип attr работает как шарм. Для справки, когда я помещал идентификаторы 2000 в Match, поскольку '@ (Field) 1 | 2 | ... | 2000' занимал две минуты, когда я делал как' и имя_имя в (1,2, ..., 2000) потребовалось 0,12 секунды. Быстрее, чем тогда запрос Mysql ... – user3649739

0

Если Attrib является VARCHAR, то это лучше для MySQL:

WHERE attrib IN ('1', '2', ...) 

Если это числовое, то это лучше всего подходит для MySQL:

WHERE attrib IN (1, 2, ...) 

Обратите внимание, что с постоянной константой ong может привести к серьезной неэффективности.

 Смежные вопросы

  • Нет связанных вопросов^_^