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

标签 sql sql-server database performance indexing

我有一个这样的表:

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/

相关文章:

教程中的 MySQL SQL 查询问题

c# - 使用 EF 的 DbContext.ExecuteSqlCommand() 进行交易时出现异常

sql-server - Node.js MSSQL tedius ConnectionError : Failed to connect to localhost:1433 - connect ECONNREFUSED

sql - 如何设计公交路线数据库?

用于 200 多个表的 SQL 数据建模/映射软件

sql - 创建具有数字范围的临时表

sql - 如何从 [存储过程] 中选择 [临时表1] = [子选择 1]、[临时表2] = [子选择 2]

mysql - 需要在删除和插入模式下将最近5个月的数据存储在表中

sql-server - 涉及 IF EXISTS 的 SQL 优化

SQL 服务器 : trigger on Insert alter input