首页 > 解决方案 > mysql 5.7 是否总是在索引列和“类似模式”是什么时执行解释类型索引?

问题描述

与通配符一起使用时的解释结果

一个面试题:“mysql index什么时候不占用?” 有人说:“当在 like 中使用 '%' 时,'%' 是第一个字符。”

然后我测试了sql,然后感到困惑......

他的意思是1.在某些情况下mysql不使用索引进行搜索

或者

2.遇到'%abc'或'%abc%'时,仍然使用索引但会进行全索引扫描,那么索引就失效了???

标签: mysqlsql-likeexplain

解决方案


这是因为 MySQL 不可能索引所有可能的子字符串。它只能处理abc%前缀类型的查询,因为索引是有序的,所以有时可以使用LIKE索引来优化查询。

MySQL 的问题EXPLAIN在于它与其他 RDBMS 平台相比相当薄弱,并且会做出很多猜测,有时甚至是疯狂的猜测。

相比之下,Postgres 会在考虑实际值的情况下为您提供实际查询执行方式的细分。MySQL 倾向于对会发生什么做出最好的猜测,而实际结果可能完全不同。


推荐阅读