索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其反,可以说“成也索引,败也索引”。
本系列文章来自Stairway to SQL Server Indexes,然后经过我们团队的理解和整理发布在agilesharp,希望对广大的技术朋友在如何使用索引上有所帮助。
系列文章索目录:
SQL Server索引进阶第一篇:索引介绍
SQL Server索引进阶第二篇:深入非聚集索引
SQL Server索引进阶第三篇:聚集索引
SQL Server索引进阶第四篇:页和区
SQL Server索引进阶第五篇:索引包含列
SQL Server索引进阶第六篇:书签
SQL Server索引进阶第七篇:过滤的索引
SQL Server索引进阶第八篇:唯一索引
SQL Server索引进阶第九篇:解读执行计划
SQL Server索引进阶第十篇:索引的内部结构
SQL Server索引进阶第十一篇:索引碎片分析与解决(上)
SQL Server索引进阶第十一篇:索引碎片分析与解决(中)-碎片发生原理深度剖析
SQL Server索引进阶第十二篇:索引的创建,修改和删除
SQL Server索引进阶第十三篇:Insert,Update,Delete语句
SQL Server索引进阶第十四篇:索引统计
SQL Server索引进阶第十五篇:索引的最佳实践
其实说到执行计划,相信已经不是什么神秘的东西了,可以说已经逐渐的成为了理解优化的基础知识。在本系列之前的很多的文章中,提到也是用过执行计划。所谓的执行计划,说的通俗一点就是查询语句的执行算法。通过查看执行计划,可以让我们看到很多的优化引擎的内部的信息,本篇的文章不可能对执行计划进行很详尽而全面的讲解,但是,朋友们可以把这个作为学习执行计划的一个入口,在以前,我们团队会给出更多的主题的文章和视频。
另外有关推荐大家去看我们站点的另外一个系列:查询优化器内核分析,可以进一步的加上大家对SQL Server内部的一些理解。
那么,简而言之,执行计划可以分为三种格式的:图形的,XML格式的,纯文本格式的。对于执行计划,又可以分为两类:估算的执行计划和实际的执行计划。意思非常好理解,这里不赘述。
下面我们就来快速的看看。
图形化的执行计划
正如之前所说的,执行计划一组就是告诉SQL Server如何去执行一个查询语句的指令。
我们就通过一个简单查询来看看它的实际的执行计划:
- SELECT LastName, FirstName, MiddleName, Title
- FROM Person.Contact
- WHERE Suffix = 'Jr.'
- ORDER BY Title
最直接的查看方式就是点击如下的图标(查看的实际的执行计划):
执行计划如下:
XML格式的执行计划
在执行的语句之前加上:SET SHOWPLAN_XML ON
在语句之后加上:SET SHOWPLAN_XML OFF,示例代码如下:
- SET SHOWPLAN_XML ON;
- GO
- SELECT LastName, FirstName, MiddleName, Title
- FROM Person.Contact
- WHERE Suffix = 'Jr.'
- ORDER BY Title;
- SET SHOWPLAN_XML OFF;
- GO
结果如下:
文本格式的执行计划
执行如下的语句:
- SET SHOWPLAN_text ON ;
- GO
- SELECT LastName, FirstName, MiddleName, Title
- FROM Person.Contact
- WHERE Suffix = 'Jr.'
- ORDER BY Title;
- go
- SET SHOWPLAN_text off ;
- GO
上面的SET SHOWPLAN_text ON显示的是估算的执行计划,如果要看实际的执行计划,就需要采用SET STATISTICS PROFILE ON ;和SET STATISTICS PROFILE OFF。我们这里篇幅有限,不再细说。
解读执行计划
执行计划的得到非常的容易,如果真的要理解,那就得要花很大的功夫了。最起码的就是要把其中涉及到的很多的一些图形代表的意思需要搞清楚,这不是一朝一夕的事情。
我这里首先还是推荐大家去看看我之前说的“查询优化器内核分析”,里面对执行计划中涉及到很多的操作都有讲述。其中与本篇相关的文章如下: