85 提纲挈领的告诉你,SQL语句的执行计划和性能优化有什么关系?
接着我们就要进入MySQL学习中极为重要的一个环节了,那就是MySQL的查询语句的执行计划分析以及SQL优化,这可以说是MySQL实践中对于开发人员最常见最需要掌握的一个技能了,但是很多人对MySQL内核级的原理的理解较为肤浅,同时对于索引结构和查询时使用索引的原理也不甚了解,更谈不上说能看懂MySQL的执行计划了。
SQL优化技巧中包含了我们之前讲的设计索引以及让SQL用上索引,但是SQL优化还有很多其他的东西。
实际上有时候往往你会发现自己的数据库里有很多表,每个表的数据量也不小,然后写出来的SQL也比较复杂,各种关联和嵌套子查询,搞的人看的都眼晕,然后表面上看起来这个SQL部分用上了索引,结果性能还是差,差,差,这是为什么呢?
所以说,基础的以及日常的SQL优化就是设计好索引,让一般不太复杂的普通查询都用上索引,但是针对复杂表结构和大数据量的上百行复杂SQL的优化,必须得建立在你先懂这个复杂SQL是怎么执行的。
你有那么多的数据表,每个表都有一个聚簇索引,聚簇索引的叶子就是那个表的真实数据,同时每个表还设计了一些二级索引,那么上百行的复杂SQL跑起来的时候到底是如何使用各个索引,如何读取数据的?
这个SQL语句(不管是简单还是复杂),在实际的MySQL底层,针对磁盘上的大量数据表、聚簇索引和二级索引,如何检索查询,如何筛选过滤,如何使用函数,如何进行排序,如何进行分组,到底怎么能把你想要的东西查出来,这个过程就是一个很重要的东西:执行计划!
也就是说,每次你提交一个SQL给MySQL,他内核里的查询优化器,都会针对这个SQL语句的语义去生成一个执行计划,这个执行计划就代表了,他会怎么查各个表,用哪些索引,如何做排序和分组,看懂这个执行计划,你就学会了真正的SQL优化的一半了!
当你看懂执行计划之后,还能根据他的实际情况去想各种办法改写你的SQL语句,改良你的索引设计,进而优化SQL语句的执行计划,最终让SQL语句的性能得到提升,这个就是所谓的SQL调优。