多列索引的顺序

时间:2009-12-03 15:37:26

标签: sql database

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

例如,接受查询:

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

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

CREATE INDEX my_index
ON my_table (column_1, column_2)

或者像这样:

CREATE INDEX my_index
ON my_table (column_2, column_1)

感谢您的帮助!

3 个答案:

答案 0 :(得分:23)

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

如果你在一个专栏上订购会很重要; (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无能为力。

答案 1 :(得分:2)

这个shoudl给你一个好主意

SQL Server Clustered Index - Order of Index Question

在SO上还有更多这样的事情。

答案 2 :(得分:0)

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