当前位置:  开发笔记 > 数据库 > 正文

SQL Server聚簇索引 - 索引问题的顺序

如何解决《SQLServer聚簇索引-索引问题的顺序》经验,为你挑选了2个好方法。

我有一张像这样的桌子:

keyA keyB data

keyA和keyB一起是唯一的,是我表的主键,并构成聚簇索引.

keyB有5个可能的值,但keyA的可能值不限.keyB通常递增.

例如,以下数据可以按两种方式排序,具体取决于首先订购的键列:

keyA keyB data
A    1    X
B    1    X
A    3    X
B    3    X
A    5    X
B    5    X
A    7    X
B    7    X

要么

keyA keyB data
A    1    X
A    3    X
A    5    X
A    7    X
B    1    X
B    3    X
B    5    X
B    7    X

我是否需要告知聚簇索引哪些键列具有较少的可能值,以允许它首先按该值对数据进行排序?或者在首先订购的性能方面无关紧要?



1> Sam..:

您应该首先使用最具选择性的列来命令复合聚簇索引.这意味着具有最大值的列与总行数相比较.

"B*TREE索引提高了从表中选择一小部分行的查询的性能." http://www.akadia.com/services/ora_index_selectivity.html?

本文适用于Oracle,但仍然相关.

此外,如果您有一个不断运行并返回少量字段的查询,您可以考虑创建一个包含所有字段的复合索引 - 它不必访问基表,而是从索引中提取数据.

ligget78关于确保提及复合索引中第一列的评论非常重要.



2> liggett78..:

如果使用(keyA,keyB)创建索引(无论是否为聚簇),那么这就是值的排序方式,例如第一个keyA,然后是keyB(这是你问题中的第二个案例).如果你想要反过来,你需要指定(keyB,keyA).

它可能在性能方面很重要,当然取决于您的查询.例如,如果您有(keyA,keyB)索引并且查询看起来像WHERE keyB = ...(不提及keyA)则无法使用索引.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有