目录
一、概要
对于每一个后端开发者来说,不管是工作还是在面试过程中,SQL的性能优化都是一个特别常见的问题,看似简单,但是在遇到这种问题,真正的能把这个问题处理好,都是一件不是那么容易的事情,遇到慢sql,大家常规的操作,就是从索引入手,看执行计划,但是通常情况下,在开发方案阶段,数据库表的索引设计,都是经过评审过的,而且都有比较完成的开发规范,比如不能直接select * from 表名,in中的值不能太多等。所以本篇文章以Mysql为例,从另一个角度排查一下慢sql的原因,希望通过这篇文章可以帮助到大家。
二、sql查询执行流程
首先我们要清楚sql查询的执行流程,这样才能更好的理解导致sql查询慢的原因,以mysql为例来讲一下sql查询的执行流程。我们的springboot应用在执行一个sql查询之前,要先给数据库建立一个网络连接,如果只有一个连接,连接建立成功后,springboot应用程序会通过网络连接把要执行的查询sql发给mysql,mysql接收到查询sql后,先通过分析器检查sql是否有语法错误,然后给到优化器,优化器会根据一些规则,来判断使用哪个索引,最后执行器会调用存储引擎(目前mysql默认的存储引擎为InnoDB),因为读写磁盘比较慢,InnoDB里加了一层内存,也就是Buffer Pool,Buffer Poo