【问题标题】: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]) 

?

【问题讨论】:

    标签: sql-server non-clustered-index


    【解决方案1】:

    是的,这很重要!

    如果您的查询包含该索引的 n 最左侧 列,则可能会使用该索引

    所以对于您的第一个版本的索引MultiFieldIndex_1,如果您使用它可能

    • 使用所有四列
    • 使用 A、B、C 列
    • 使用 A、B 列
    • 使用 A 列

    但如果您使用它,它将不会考虑

    • 只是 D 列
    • C 列和 D 列 等

    但是,如果您仅指定 DDC,则可能会使用您的第二版索引可能 - 但它会永远不会 如果您只指定 AB 则使用

    仅当您始终使用索引中定义的所有列时,它们的定义顺序(几乎)变得无关紧要(仍然存在一些细微差别至于按最高选择性排序等,但这些比如果您没有在 SELECT 语句中指定最左边的 n 列将永远不会使用索引这一事实重要得多)

    【讨论】:

    • 查询是指 WHERE 子句中的列对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2014-01-08
    • 2011-06-02
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多