什么是执行计划?
执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。
如何查看执行计划?
以sqlserver为例
看懂执行计划
从上图可以看出,执行计划可以很直观的显示一个sql语句的执行过程,查询了那些表,怎么查询的,走没走索引,走的哪些索引,都可以一眼就看出来,这对我们分析sql语句的性能有很大帮助。
举例说明:
有这样一条sql语句:select * from test_table2 where pay_id in (1,2,3)
我们在表test_table2给pay_id加了索引,按理说它查找的时候会走索引,我们看看执行计划是怎么执行的。
68%的开销是用于键查找,没走索引, 32%的开销走了pay_id的索引查找,为什么加了索引,还有一部分没走索引呢?这是因为我们查找的select * ,查找的是所有字段,表的其他字段,每加索引,只有pay_id加了,所以只走了一部分索引查找,但是性能最高点,仍然是键查找,怎么让键查找变成索引查找呢?我们都会想到把表的所有字段都加上索引,当然这是不现实的,也是没必要的。
-
针对上面的问题,如果pay_id是主键索引,也不会走键查找,我们可以看看效果:
表test_table2的主键是Id,通过主键id查找所有字段,可以看到是不会有键查找的,全部走的是聚集索引,不会二次查找,像非聚集索引会走二次查找,所以才会产生像刚刚发生的那样,走键查找的情况。
-
还有一种也可以避免走键查找,就是创建覆盖索引。像这样:
结论:
学会看执行计划,对我们分析sql语句性能很重要,也顺带介绍了聚集索引,非聚集索引,覆盖索引。