我从来没有真正理解过这两个索引之间的区别,有人可以解释一下区别是什么(性能方面,在db中是索引结构,在存储方面是这样)?
我了解这个问题是广泛的,请对此表示同意。我真的不知道如何缩小范围。也许如果你们开始解释您的专业知识,那么我会向正确的方向指点一下,使我可以将问题缩小一些?
包含索引
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
ON Person.Address (PostalCode)
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
普通指数
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
ON Person.Address (PostalCode, AddressLine1, AddressLine2, City, StateProvinceID);
索引的内部存储使用B-Tree结构,由“索引页”(根目录和所有中间页)和“索引数据页”(仅叶子页)组成。
请注意,请勿将“索引数据页”与存储大多数实际数据列的“数据页”(聚集索引的叶页)混淆。
INCLUDE
节中放置一些列,每个索引键上存储的数据更少。使用索引时,索引键用于在索引页面中导航到正确的索引数据页面。
INCLUDE
列,则该数据将在查询需要时立即可用。INCLUDE
列,则需要对聚集索引(如果未定义聚集索引,则为堆)中的正确行进行附加的“书签查找”。需要注意的一些事情有望解决您的一些困惑:
INCLUDE
列中有什么内容)。INCLUDE
列。)值得注意的是,在将INCLUDE
列添加为功能之前:
INCLUDE
列基本上可以更有效地实现相同的好处。注意:有一点很重要。
INCLUDE
如果您习惯于始终将查询编写为,这通常会导致您从索引列中获得零收益SELECT * ...
。通过返回所有列,您基本上可以确保在任何情况下都需要书签查找。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句