查看sql语句的执行步骤
作为后端工程师,sql语句的优化是非常有必要的,但是如果没有人来说的话,初学者是不知道该如何优化比较好,所以这篇博客就是教大家来看sql语句的执行计划,进而学会优化sql语句
sql server
这次选用的数据库是sql server,如果大家想要看mysql的执行计划,也可以上百度去找mysql如何查看执行计划,但是这篇博客主要是分析怎么执行计划。
查看执行计划
在navicat上面查看
先点击1,运行你的sql语句,然后再点击2,解释你的sql语句
在server studio上面查看
- 先点击文件
- 再点击新建
- 再点击 sql server compact查询
- 然后连接你的数据库
- 写上你需要查看的sql语句
- 然后点击包括实际执行计划
分析
索引的分类
- 聚集索引
就是你的表有索引的查询,一般都是聚集索引 - 非聚集索引
相反,非聚集索引就是当你的表中没有索引时,就是非聚集索引
聚集索引的方式会优于非聚集索引方式
查看索引分类
在studio中查看
在logical operation中,如果有clustered在前面时就是聚集索引
在navicat中查看
在logicalop中如果有clustered开头就是聚集索引
扫描方式
- Table Scan
Table Scan这种扫描方式是遍历全表查询,速度数最慢的一种 - Index Scan
Index Scan这种是筛选一部分数据,然后再进行匹配 - Index Seek
Index Seek这种是依据索引条件,直接定位到数据
开销
执行sql语句分别有三种开销
- I/o开销
数据从磁盘加载到内存,再从内存中缓存,输出到应用端的开销 - cpu开销
cpu开销,是指运行这段sql语句所占的cpu - 子树开销
查询优化器执行此操作及同一子树内位于此操作之前的所有操作的总开销
这两个开销是精密相连的,一旦优化一部分,另外一部分也会相对减少
估计行数
估计行数,就是估计需要扫描的行数,
在navicat中是Estimate
估计每一行的字节数
在navicat中是AvgRowSize
根据以上这些参数查看每个执行步骤的执行计划,就可以对应的优化我们的sql语句了