【发布时间】:2010-12-09 14:37:42
【问题描述】:
考虑以下复合聚集索引:
CREATE UNIQUE CLUSTERED INDEX ix_mytable ON mytable(a, b)
显然,b 上的单独索引将使搜索 b 的特定值更快。
但是,如果 b 上的单独索引不 被使用,在我看来,复合索引仍然可以用于查找具有特定值的元组 b 不是表扫描,而是通过遍历 a 的离散值树并在本地搜索 b,跳转到下一个值一个等
这就是 SQL Server 的工作方式吗? (例如,如果 MSSQL 对具有多列的索引使用单个哈希值,则不会。)
确实如此,并且由于其他原因已经需要复合索引,并且 a 的离散值的数量足够少,性能/空间的权衡可能会偏离拥有 a b 的单独索引。
(上面的 UNIQUE 和 CLUSTERED 约束对于这个例子来说并不是真正需要的,但它们代表了对 b 的最快检索,它不涉及 b的单独索引>--前者为a的每个循环提供了一个快捷方式,后者在查找中删除了一个间接度)。
【问题讨论】:
标签: sql-server tsql indexing clustered-index