我有一个这样的表:
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
我是否需要告诉聚簇索引哪些键列的可能值较少,以允许它首先按该值对数据进行排序?还是先排序的性能无关紧要?
最佳答案
您应该首先使用最有选择性的列对复合聚集索引进行排序。这意味着与总行数相比具有最多不同值的列。
“B*TREE 索引提高了从表中选择一小部分行的查询的性能。” http://www.akadia.com/services/ora_index_selectivity.html ?
本文适用于 Oracle,但仍然具有相关性。
此外,如果您有一个持续运行并返回少量字段的查询,您可以考虑创建一个包含所有字段的复合索引——它不必访问基表,而是从索引中提取数据。
ligget78 关于确保提及复合索引中的第一列的评论很重要。
关于SQL Server 聚集索引 - 索引问题的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/344068/