只是一个简单的问题,但是当它跨越多列时,索引的顺序是否重要?
例如,接受查询:
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)
感谢您的帮助!
答案 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)
答案 2 :(得分:0)
找出答案的最佳方法是衡量它。尝试一个,测量性能,然后删除该索引并尝试另一个。通常,您希望一起查询的数据在磁盘上的索引中靠近在一起,并且索引中列的顺序会对索引存储在磁盘上的方式产生影响。很难准确地猜测哪种索引组合最有效,所以尝试一些不同的可能性和度量来找出哪种索引最适合您的数据。