查询很大,并且在WHERE子句中包含一长串'LIKE'测试,例如,... SELECT colA FROM t WHERE(colX LIKE'word1%word2%'或colX LIKE'word3%word4%'要么...);
colX有一个索引。 mysql使用索引,因为比较不以'%'开头。通过EXPLAIN检查我看到当SQL字符串变大时,mysql停止使用索引并开始执行全表扫描。它似乎与where子句中的'LIKE'测试数有关。在阈值处,我可以再添加一个“LIKE”并停止使用索引,并且比没有额外的“LIKE”时间长10倍。
是否有一些mysql变量可以控制这样的行为?
答案 0 :(得分:1)
我相信如果你添加FORCE INDEX [index_name]
,它会在任何情况下都使用索引。另外,请检查Hint index documentation。 sysvar_max_seeks_for_key的值也会影响是否使用索引。也许将此值更改为较小的数字会有所帮助。