考虑下面的复合物聚集索引:当使用复合聚集索引时,SQL Server会跳转吗?
CREATE UNIQUE CLUSTERED INDEX ix_mytable ON mytable(a, b)
显然,在b一个单独的索引将搜索的b快一个特定的值。
然而,如果上b一个单独的索引是使用不,似乎对我来说,综合指数仍然可以用来找到元组与b代替表扫描的特定值,由遍历一个离散值的树,做b本地搜索,跳转到一个下一个值,等
这是SQL Server如何工作的? (例如,如果MSSQL对多列索引使用单个散列值,则不会这样。)
它是,并且由于其他原因已经需要组合索引,并且离散值的数量为一个是足够小,性能/空间的权衡可能摆脱对b具有单独的索引。
(唯一的和集群的约束上面是不是真的需要这个例子,但他们代表的b最快的检索不涉及对b --the前者提供了一个快捷方式的单独的索引每个循环的a,后者在查找中删除一个间接程度)。
“索引跳过扫描”正是我所设想的那种方法。有点失望,MSSQL不能做到这一点,因为它往往是一个比ORB更友好的RDBMS。 – richardtallent 2009-10-24 12:14:09
以下是相应的Microsoft Connect项目:https://connect.microsoft.com/SQLServer/feedback/details/695044/implement-index-skip-scan请为此投票。 – usr 2011-10-15 14:29:20
@usr - 只要阅读你的连接项,然后把你的链接回到堆栈溢出。使用递归CTE可以做一个穷人的版本。 [示例语法在这里](http://stackoverflow.com/questions/7753319/sql-server-pick-random-or-first-value-with-aggregation/7753492#7753492) – 2011-10-15 20:42:52