考虑以下复合聚集索引:
CREATE UNIQUE CLUSTERED INDEX ix_mytable ON mytable(a, b)
显然,一个单独的索引b将使搜索的特定值b faster.
但是,如果单独的索引b is not就业,在我看来,复合索引仍然可以用于查找具有特定值的元组b通过遍历离散值树来代替表扫描a并进行本地搜索b,跳转到下一个值a, etc.
SQL Server 就是这样工作的吗? (例如,如果 MSSQL 对具有多列的索引使用单个哈希值,则不会。)
确实如此,并且由于其他原因已经需要复合索引,并且离散值的数量a足够小,性能/空间权衡可能会偏离为b.
(上面的 UNIQUE 和 CLUSTERED 约束对于这个例子来说并不是真正需要的,但它们代表了最快的检索b不涉及单独的索引b--前者为每个循环提供快捷方式a,后者在查找中删除了一级间接性)。
不,不存在跳过“a”簇的情况。仅当指定最左边的列时才能使用索引,否则需要采用全扫描。
Oracle有所谓的“索引跳过扫描”操作员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)