随笔分类 - 02.索引
Indexing
摘要:时间过得真快——再过几分钟,你就要完成第2个月的性能调优培训。今天这部分培训我想讲下非聚集索引的更多信息,还有你会碰到它的一些负作用。上一星期我们讨论了SQL Server里的书签查找,它是非常危险的。在执行计划里SQL Server访问非聚集索引时,额外列必须要从表本身获取时(因为它们不是非聚集索...
阅读全文
摘要:在索引碎片里我们解释了不同类型的碎片,还有它们如何影响查询性能。在这个文章里,我们会讨论下如何检测索引碎片。内部碎片检测内部碎片是关于页面饱和度的一切,可以用DETAILED模式的sys.dm_db_index_physical_stats,avg_page_space_used_in_percen...
阅读全文
摘要:这篇文章会解释下不同类型的碎片。理解索引碎片的概念对有效检测和移除碎片非常重要。什么是碎片碎片可以定义为:任何情况下,在访问一个表时,造成比适量更多的磁盘IO操作或更长的磁盘IO操作。SELECT查询的最佳操作发生在,表的数据页是尽可能连续的,而且页是尽可能完整打包(fully packed)的。碎...
阅读全文
摘要:在过去的文章里,我们已经讨论了各种不同索引。这个文章里,我们会讨论下键列的顺序(索引列的顺序)。索引键列的顺序基于数据的访问模式还有你想如何组织数据。对于索引键列的顺序,常规指导方针就是把查询用到最多的列放在第一列。这并不是说,所有你索引里的唯一ID列就应该是第一列。优化器是基于索引上的可用统计信息...
阅读全文
摘要:过滤索引(Filtered index)是在SQL Server 2008里新引入的功能。到目前我们谈到的索引都是在建立在整张表上的。换句话说,索引和表有一样的记录树。使用过滤索引,我们可以创建表子集的索引。这个可以通过创建索引的时候加上where子语完成。这个可以帮助在存储上减小索引的大小同样索引...
阅读全文
摘要:在索引深入浅出:非聚集索引的B树结构在聚集表里,在聚集表里,我们看到非聚集索引的叶子层只包含非聚集索引键和聚集索引键。从聚集表结构或堆表结构里拿到剩下列,SQL Server需要进行书签/键查找操作。很多情况下书签或键查找非常消耗资源。我们来看个例子。在这里我们打开了IO统计信息,还有点击工具栏的显...
阅读全文
摘要:在索引深入浅出:非聚集索引的B树结构在聚集表里,我们讨论了非聚集索引。我们提到,唯一非聚集索引可以让所讨论的问题变得简单很多。我们已经知道了非聚集索引的通用结构,现在我们来看下在非唯一列上的非聚集索引的存储结构。在索引深入浅出:选择正确并合适的聚集索引键里,我们讨论了在非唯一列上如何管理聚集键。我们...
阅读全文
摘要:今天我们来探讨下聚集索引的设计要求。在选择聚集索引键时,有好几点需要考虑的。选择聚集索引键没有硬性规定。多实践,多从网上找问题的答案都会帮你找到正确的索引键。唯一性(Uniqueness)SQL Server允许你在非唯一列创建聚集索引,但是唯一性是任何索引最理想的属性,尤其对于聚集索引。即使SQL...
阅读全文
摘要:在“索引深入浅出:非聚集索引的B树结构在聚集表”里,我们讨论了在聚集表上的非聚集索引,这篇文章我们讨论下在堆表上的非聚集索引。非聚集索引可以在聚集表或堆表上创建。当我们在聚集表上创建非聚集索引时,聚集索引键担当为行指针。在堆表里,文件号,页号和槽号(file id , page number and...
阅读全文
摘要:上个星期我讨论了SQL Server里的聚集索引。当你在表上定义了一个聚集索引,你是物理上把你的表数据按提供的聚集键列的顺序存储。在SQL Server里,一个表只能定义一个聚集索引,非聚集索引可以定义多个(最多999个)。非聚集索引是第二索引,你可以在表上列进行定义。你也可以把非聚集索引与书比较。...
阅读全文
摘要:一个表只能有一个聚集索引,数据行以此聚集索引的顺序进行存储,一个表却能有多个非聚集索引。我们已经讨论了聚集索引的结构,这篇我们会看下非聚集索引结构。非聚集索引的逻辑呈现简单来说,非聚集索引是表的子集。当我们定义了一个非聚集索引时,SQL Server把整套非聚集索引键存在不同的页里。我们来看下一个包...
阅读全文
摘要:在SQL Server里,有2种表是以存储为基础的。有聚集索引的表叫聚集表,没有聚集索引的表叫堆表。在上一篇文章,我们讨论了堆表的特性和存储结构。在这篇文章里,我们来看下聚集表。有聚集索引的表叫聚集表。聚集索引保存了使用B树结构的聚集键,并只能以此顺序存储实际的数据。这也是SQL Server限制一...
阅读全文
摘要:在上一个文章里,我们理解了有聚集索引表和没有聚集索引表之间的区别。有聚集索引的表叫聚集表。没有聚集索引的表叫堆表(heap table)。堆表(heap table)没有聚集索引的表堆表在sys.partitions里有1条index_id = 0 的记录数据存储没有任何的顺序,插入数据也没顺序由于...
阅读全文
摘要:很多人对索引都没有一个清晰的认识,对于聚集索引和非聚集索引之间的区别也不是很清楚。如果有人问我索引是什么,我觉得这个问题有点大,很难在一篇文章里解释清楚。所以我决定尝试写这一系列文章,用一个简单的,可以理解的方法解释索引,尽管网上关于索引的文章有一箩筐那么多。简单来说,索引帮助数据库引擎使用最小的资...
阅读全文
摘要:本篇是“索引深入浅出”的开篇,也是这个系列文章的聚集索引页,下面文章标题排列顺序将和对应文章发布顺序一致:索引简介:索引概述,通过现实生活实例理解聚集索引、非聚集索引还有键查找(Key Look up)。索引深入浅出(1/10):索引简介。堆表:没有聚集索引的表叫堆表。在堆表中的数据存储没有任何顺序...
阅读全文
摘要:上个星期我向你介绍了堆表(heap tables)。我们说过,在SQL Server表可以是堆表(Heap Table)或者聚集表(Clustered Table)——一个在它上面有聚集索引(Clustered Index)定义的表。今天我们来谈论聚集索引(Clustered Index)的更多细节...
阅读全文
摘要:欢迎来到SQL Server性能调优培训的第2个月。这个月将会是最有趣和最有挑战性的一个月,这个月我们专一只谈SQL Server中的索引,索引,还是索引。相信我,值得一个月去学习索引。今天我会谈下堆表(Heap Tables),在接下来的3周,我们会探讨下聚集索引,非聚集索引,还有SQL Serv...
阅读全文