列被编入索引和全文。为什么“或”增加5-8秒?
SELECT * FROM exampleTable WHERE MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)
// returns in .05 seconds
SELECT * FROM exampleTable WHERE someColumn LIKE 'testing123%'
// returns in .003 seconds
SELECT * FROM exampleTable WHERE (MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE) OR MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE))
// returns in 5-8 seconds; yes, they are same MATCH statement...
SELECT * FROM exampleTable WHERE (MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)OR someOtherIndexedColumn LIKE 'testing123%'
// returns in 5-8 seconds; ***** different columns this time*******
我觉得奇怪的是,当MySQL是同样的语句时,它是如此缓慢。这就像导致语句"SELECT * FROM tableName 1 OR 1 "为5秒一样。无论列是相同还是不同,在速度上都没有区别。
发布于 2015-02-12 21:43:04
尽管MySQL 5.0+现在支持索引合并,但目前存在这样的限制:
索引合并不适用于全文索引.我们计划在未来的MySQL发行版中将其扩展到包括这些内容。
通常,您可以将这些重写为UNION
查询:
SELECT * FROM exampleTable
WHERE MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)
UNION
SELECT * FROM exampleTable
WHERE MATCH(someColumn) AGAINST('+testing123*' IN BOOLEAN MODE)
https://stackoverflow.com/questions/28488123
复制相似问题