环球网校是美国纳斯达克上市企业欢聚时代(NASDAQ:YY)旗下品牌 | 住房和城乡建设部 建筑人才培训合作单位
您现在的位置在: > 财会考试 > 会计从业资格 > 考试动态 >

二级查询 MySQL五种索引类型sql执行顺序哪些适合建索引失效

2023-12-20 来源:网络 作者:佚名

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优化器选择不走索引:当查询数据量达到总表数据一定比率的时侯,优化器会感觉走索引效率不如全表查询,因而会舍弃走索引。 #

责编:admin 返回顶部  打印

关于我们联系我们友情链接网站声明网站地图广告服务帮助中心