MySQL五种索引类型
sql执行次序
(根据sql执行顺序来优化,可以把关联表判断条件放到on后面)
from
on
join
where
group by
having
select
distinct
union
order by
limit
一、哪些数组适宜建索引
范围查询索引失效,只针对二级索引(不仅字段,其他索引都是二级索引)
(1)、如果走二级索引查询,步骤就是:二级索引–>字段索引–>数据,这就是回表查询(mysql索引中关联的字段,而不是数据,所以二级索引查询会有一个回表的操作)。
(2)、硬盘随机I/O的性能远高于次序I/O。
1、范围查询失效问题
注意二级查询,舍弃索引走全表查询须要满足以下几点:
1、二级索引
2、范围查询
3、查询数目超过了总数据的某个比率
4、并且查询数组不止id和索引还包含了其他数组(前面数组不仅仅为id和where前端索引数组)
建议索引*from表名useindex(索引名)where…
强制索引*from表名forceindex(索引名)where…
忽视索引*from表名index(索引名)where…
2、最左原则3、函数造成索引失效4、字段类型不一致索引失效5、运算符造成索引失效6、or造成索引失效
例:(和是索引,不是索引数组)
7、模糊查询造成索引失效8、IN、NOTIN、、NOT造成索引失效
注意:
只检测存在性,出现多个一样的他只匹配一次
in前面出现多个一样的他是会每位匹配一次
所以,可以的话尽量用
网上说的大表套小表用in,小表套大表用,由于前面会关联查询多次,经验证不存在这些问题情况,从下边执行计划中可以看出是先执行1fromcWHERE=''由于这个sql查询的数据量恰好是1,之后在结果集的临时表中去获取最终结果。这些情况用in或是都一样疗效,区别无非是我前面说的相同数据匹配一次或多次区别!
9、ISNULL,ISNOTNULL索引失效问题
10、子查询造成索引失效
子查询有三种形式:
1、跟在前面二级查询,会很慢(不建议)
2、跟在join前面,会创建临时表
3、跟在where和on前面
当WHERE旁边跟子查询,
11、sql优化方案
可以按照以上造成索引失效、以及sql执行次序来针对sql进行优化
三、总结
索引失效可以从两个方面总结:
破坏了索引结构mysql优化器选择不走索引
破坏了索引结构:like前模糊,索引运算(加减乘除),对索引使用函数,组合索引非最左原则等。
mysql优化器选择不走索引:当查询数据量达到总表数据一定比率的时侯,优化器会感觉走索引效率不如全表查询,因而会舍弃走索引。
第一考试网友情提示:如果您遇到任何疑问,请登录第一考试网考试动态频道或添加qq:,第一考试网以“为考友服务”为宗旨,秉承“快乐学习,轻松考试!”的理念,旨在为广大考友打造一个良好、温馨的学习与交流平台,欢迎持续关注。以上是小编为大家推荐的《二级查询 MySQL五种索引类型sql执行顺序哪些适合建索引失效》相关信息。
编辑推荐