我在一个表上有一个非常有效的Sphinx查询。然而,不幸的是,查询的一部分需要由100个选项组成的大型"或"语句。狮身人面像窒息
@(field) (1|2|..|800)
非常糟糕,需要长达一分钟的时间,而同样的管道查询在Mysql中需要<1秒是否执行
field in (1,2,..,800
甚至
Field =1 or Field=2 or Field=... or Field=800
。
是否有一种方法将两者结合在一个查询中?
Sphinx可以对ATTRIBUTEs执行in(..)
查询。
可能不如mysql高效(至少如果索引列)
sphinxQL> SELECT * FROM index WHERE MATCH('...') AND attrib IN (1,2,...)
如果属性是一个VARCHAR
,那么这是最好的MySQL:
WHERE attrib IN ('1', '2', ...)
如果是数字,那么这是最好的MySQL:
WHERE attrib IN (1, 2, ...)
请注意,常量的类型错误会导致严重的效率低下。