- 如果索引列出现了隐式类型转换,则MySQL不会使用索引
- 在where子句中字段类型是字符串,值是数值,如果没有加引号则MySQL不会使用索引
- where条件中含有or,除非or前面使用了索引列而or之后是非索引列,索引会失效(回表次数过多导致)
- MySQL不能在索引中执行like操作,这是底层存储引擎api的限制,最左匹配的like比较会转换为简单的比较,但是如果以通配符开头的like查询,存储引擎就无法比较。这种情况下MySQL只能提取数据行的值而不是索引值来比较
- 如果查询的列不是独立的,则MySQL不会使用索引。独立的列是指索引列不能是表达式的一部分,也不能是函数的参数
- 对于多个范围条件查询,MySQL无法使用第一个范围列后面的其他索引列,对于多个等值查询则没有这种限制
- 如果MySQL判断全表扫描比使用索引查询更快,则不会使用索引
- 索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,则无法使用该索引
索引(a,b,c)没有a索引失效,其他没有,索引可以正常使用(MySQL5.6后优化的索引条件下推)
posted @
2022-03-14 09:49
张三丰学Java
阅读(
36)
评论()
编辑
收藏
举报