SQL Server 中多列非聚集索引中的列顺序是不是重要?
Posted
技术标签:
【中文标题】SQL Server 中多列非聚集索引中的列顺序是不是重要?【英文标题】:Does the order of columns in an multicolumn non-clustered index matter in SQL Server?SQL Server 中多列非聚集索引中的列顺序是否重要? 【发布时间】:2015-04-13 02:16:21 【问题描述】:为 SQL Server 表创建的多列非聚集索引中的列顺序真的很重要吗?
例如是
CREATE NONCLUSTERED INDEX [MultiFieldIndex_1]
ON [Table_01] ([Column_A],[Column_B],[Column_C],[Column_D])
和
一样CREATE NONCLUSTERED INDEX [MultiFieldIndex_1]
ON [Table_01] ([Column_D],[Column_C],[Column_B],[Column_A])
?
【问题讨论】:
【参考方案1】:是的,这很重要!
如果您的查询包含该索引的 n 最左侧 列,则可能会使用该索引。
所以对于您的第一个版本的索引MultiFieldIndex_1
,如果您使用它可能
但如果您使用它,它将不会考虑
只是 D 列 C 列和 D 列 等但是,如果您仅指定 D
或 D
和 C
,则可能会使用您的第二版索引可能 - 但它会永远不会 如果您只指定 A
和 B
则使用
仅当您始终使用索引中定义的所有列时,它们的定义顺序(几乎)变得无关紧要(仍然存在一些细微差别至于按最高选择性排序等,但这些比如果您没有在 SELECT
语句中指定最左边的 n 列将永远不会使用索引这一事实重要得多)
【讨论】:
查询是指 WHERE 子句中的列对吗?以上是关于SQL Server 中多列非聚集索引中的列顺序是不是重要?的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER数据库 唯一索引 非唯一索引 聚集索引 非聚集索引 之间区别