SQL Server如何处理非聚集索引中的包含列?

时间:2013-12-17 10:08:53

标签: sql sql-server database-indexes

我有一个问题:

非聚集索引的定义表示索引中包含的列在索引大小或最大列数方面不会被数据库引擎计数。

那么他们的工作方式究竟是什么呢?

当它们没有以索引大小运行时,它们如何帮助SQL Server?

2 个答案:

答案 0 :(得分:4)

需要注意的重要一点是,在确定索引键中的列的大小或数量(用于在索引结构中实际查找数据的值)时,数据库引擎不会计入包含的列。它们仍然会增加索引本身的大小。

在构成密钥的所有列中,索引键的大小只允许为900字节(组成索引键的列只有16列)。

添加包含的列不计入900字节/ 16列限制,但可以通过覆盖更多查询使索引更有用。

答案 1 :(得分:3)

来自其他人的好解释。

对我来说,包含的索引列很容易记住并使用这个简单的规则: 过滤器,即。 WHERE x = y等.. ,是你的关键,是否使用索引的决定是基于那些。 SELECT a,b,x 是您实际返回的值,这些是您希望包含在索引中的内容,因此SQL Server不必搜索聚簇索引/堆找到他们。

示例:

CREATE NONCLUSTERED INDEX TABLEX_A_IDX ON TABLEX (A) INCLUDE (B, C)    

SELECT A, B, C -- KEY + INCLUDED columns
FROM TABLEX WHERE A = 'ASD' -- KEY columns

当然,这不是你的问题,但它可能会有所帮助。