【译】SQL Server索引进阶第二篇:深入非聚集索引
<div id="cnblogs_post_body">SQL Server索引进阶第二篇:深入非聚集索引索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其反,可以说“成也索引,败也索引”。
本系列文章来自Stairway to SQL Server Indexes
本系列文章的第一篇介绍了SQL Server的索引,尤其重点介绍了非聚集索引,在我们的第一个例子中展示了使用非聚集索引从一个表中取得一行数据所带来的潜在好处。在本篇文章中,我们继续研究非聚集索引,本篇文章所研究的内容就要比使用非聚集索引在单表中查询一行所带来的性能提升更深一步了。
本系列文章将要列举的一些例子中介绍的部分理论是关于是非聚集索引的理论,并通过探究索引的内部结构来帮助更好的理解这些理论,在此基础上,我们分别在存在索引和不存在索引的情况下分别执行相同的查询并通过统计数据来比较性能。因此我们就可以体会到索引带来的影响了。
我们继续使用在第一篇文章中曾使用过的AdventureWorks内的部分数据。尤其是Contact表,我们仅仅使用一个我们在上篇文中中使用过的FullName索引。为了更好的测试非聚集索引带来的影响,我将建两个Contact表,其中一个存在FullName非聚集索引,而另一个不存在。总之就是,两个相同的表,一个表中存在非聚集索引,另一个不存在非聚集索引。
注意:本篇文章中的T-SQL代码都可以在文章底部找到下载链接
列表1所示代码创建了Person.Contact表的副本,如果你想恢复到初始测试状态,你可以随时运行这段代码。
<div style="border-bottom: green 1px dashed; border-left: green 2px solid; padding-bottom: 1px; margin-top: 5px; padding-left: 1px; padding-right: 1px; margin-left: 15px; border-top: green 1px dashed; border-right: green 1px dashed; padding-top: 1px; margin-buttom: 5px"> IF EXISTS ( SELECT* FROM sys.tables WHERE OBJECT_ID = OBJECT_ID('dbo.Contacts_index') ) DROP TABLE dbo.Contacts_index ; GO IF EXISTS ( SELECT* FROM sys.tables WHERE OBJECT_ID = OBJECT_ID('dbo.Contacts_noindex') ) DROP TABLE dbo.Contacts_noindex ; GO SELECT* INTO dbo.Contacts_index FROM Person.Contact ; SELECT* INTO dbo.Contacts_noindex FROM Person.Contact ;
页:
[1]