【问题标题】:Order of index on multiple columns多列索引的顺序
【发布时间】:2010-12-22 21:07:24
【问题描述】:

只是一个简单的问题,但是当索引跨越多个列时,索引的顺序是否重要?

以查询为例:

SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2)

如果我想为这样的查询添加索引,是否像这样创建索引是否重要:

创建索引 my_index 在 my_table(column_1,column_2)

或者像这样:

创建索引 my_index 在 my_table(column_2,column_1)

感谢您的帮助!

【问题讨论】:

    标签: sql database


    【解决方案1】:

    在您给出的示例中,列顺序无关紧要。

    如果您在列上订购会很重要; (col1,col2) 上的索引可用于ORDER BY col1, col2,但不能用于ORDER BY col2, col1。

    对于WHERE 子句,(col1, col2) 上的索引适用于WHERE col1 = 1 AND col2 = 1。它也适用于WHERE col1 = 1。但是WHERE col2 = 1无济于事。

    【讨论】:

    • 实际上,即使在这种情况下也很重要。如果几乎每一行都有 col1 = 1,那么如果 col2 是第一个,索引很可能会更好地工作,即使您同时查询两者。
    • 在提供的示例中也可能很重要,如果一列的选择性明显高于另一列。首先放置具有高选择性(许多不同的值)的列。
    • 此答案中的优秀信息有助于了解如何访问系统上已有的索引。
    • (col1, col2, col3) 适用于WHERE col1 = 1 and col2 = 2 ?
    • @stack 应该的​​。
    【解决方案2】:

    这应该给你一个好主意

    SQL Server Clustered Index - Order of Index Question

    在 SO 上还有很多这样的。

    【讨论】:

      【解决方案3】:

      找出答案的最佳方法是测量它。尝试一个,测量性能,然后删除该索引并尝试另一个。通常,您希望一起查询的数据靠近磁盘上的索引,并且索引中列的顺序会影响索引在磁盘上的存储方式。很难准确猜测哪种索引组合最有效,因此请尝试几种不同的可能性并进行测量,以找出最适合您的数据的组合。

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        相关资源
        最近更新 更多