使用复合聚簇索引时,SQL Server是否会跳槽?

ric*_*ent 3 t-sql sql-server indexing clustered-index

请考虑以下复合聚簇索引:

CREATE UNIQUE CLUSTERED INDEX ix_mytable ON mytable(a, b)
Run Code Online (Sandbox Code Playgroud)

显然,在一个单独的索引b将使搜索的特定值b更快.

但是,如果在一个单独的索引b使用,在我看来,该指数仍然可以用于查找特定值元b,而不是表扫描,通过遍历的离散值的树一个做对于本地搜索b,跳转到下一个值,等

这是SQL Server的工作原理吗?(例如,如果MSSQL对具有多列的索引使用单个哈希值,则不会这样.)

它是,并且由于其他原因已经需要复合索引,并且a的离散值的数量足够小,性能/空间权衡可能摆脱具有b的单独索引.

(以上UNIQUE和集群约束不是真正需要对于这个例子,但它们将代表的最快检索b不涉及一个单独的索引为b --the前者提供的快捷方式的每个循环一个,后者除去查找中的一个间接度).

Rem*_*anu 6

不,没有跳过'a'的集群.只有在指定了最左边的列时才能使用索引,否则需要使用完整扫描.

Oracle拥有所谓的"Index Skip Scan"运算符.