我有一个非常有效的狮身人面像查询工作在一张桌子上。然而,不幸的是,部分查询需要一个由100个选项组成的大型“OR”语句。狮身人面像上结合Mysql和Sphinx查询?
@(field) (1|2|..|800)
相当严重走,只要一分钟扼流圈而在MySQL中同一管道查询需要<1秒是否做
field in (1,2,..,800
甚至
Field =1 or Field=2 or Field=... or Field=800
。
有没有办法在一个查询中结合两者?
我有一个非常有效的狮身人面像查询工作在一张桌子上。然而,不幸的是,部分查询需要一个由100个选项组成的大型“OR”语句。狮身人面像上结合Mysql和Sphinx查询?
@(field) (1|2|..|800)
相当严重走,只要一分钟扼流圈而在MySQL中同一管道查询需要<1秒是否做
field in (1,2,..,800
甚至
Field =1 or Field=2 or Field=... or Field=800
。
有没有办法在一个查询中结合两者?
狮身人面像可以做in(..)
ATTRIBUTEs上的查询。
可能不是同样有效的MySQL(至少如果索引列)
sphinxQL> SELECT * FROM index WHERE MATCH('...') AND attrib IN (1,2,...)
如果ATTRIB是VARCHAR
,那么这是最好的MySQL:
WHERE attrib IN ('1', '2', ...)
如果是数字,然后这对于MySQL来说是最好的:
WHERE attrib IN (1, 2, ...)
请注意,常数是wr ong类型会导致严重的低效率。
我假设这会比'@(field)(1 | 2 | ...)'更有效率吗?我试图在这里测试,但'attribname ='1''工作'attribname在('1',2',...)'给我错误“[Err] 1064 - sphinxql:语法错误,意外的QUOTED_STRING,期待CONST_INT或' - '在''1','2'''''附近''' – user3649739
我想我需要改变我的attrib类型,我会回报对不起。 – user3649739
一旦我固定attr类型就像一个魅力。为了参考起见,当我将2000个ID放在Match中作为'@(Field)1 | 2 | ... | 2000'花了两分钟,当我在(1,2,...,2000) )耗时.126秒。事实上,然后Mysql查询更快... – user3649739