一个面试问题:“mysql索引什么时候不被使用?”有人说:“当在like中使用“%”,并且“%”是第一个字符时。”然后我测试了sql,然后感到困惑。。。他的意思是1.在类似的情况下mysql不使用索引进行搜索吗或者2.当遇到“%”或“%%”时,仍在使用索引,但将进行完全索引扫描,则索引将失效???
sqougxex1#
这是因为mysql不可能索引所有可能的子字符串。它只能处理 % 因为索引是有序的,所以有时 LIKE 可以使用索引优化查询。mysql的问题 EXPLAIN 与其他rdbms平台相比,它的性能相当差,而且会有很多猜测,有时甚至是胡乱猜测。相比之下,postgres将给出实际查询的执行方式,并考虑实际值。mysql倾向于对将要发生的事情给出最好的猜测,而实际结果可能完全不同。
%
LIKE
EXPLAIN
1条答案
按热度按时间sqougxex1#
这是因为mysql不可能索引所有可能的子字符串。它只能处理
%
因为索引是有序的,所以有时LIKE
可以使用索引优化查询。mysql的问题
EXPLAIN
与其他rdbms平台相比,它的性能相当差,而且会有很多猜测,有时甚至是胡乱猜测。相比之下,postgres将给出实际查询的执行方式,并考虑实际值。mysql倾向于对将要发生的事情给出最好的猜测,而实际结果可能完全不同。