-1

我想创建索引的列1和列2 SQL Server是什么下面的查询在mytable上执行查询的性能差异:列不同的顺序在创建索引

CREATE NONCLUSTERED INDEX [IX_1] ON [dbo].[MyTable] 
(
    [Column1] ASC, 
    [Column2] ASC 
) ON [PRIMARY] 


CREATE NONCLUSTERED INDEX [IX_2] ON [dbo].[MyTable] 
(
    [Column2] ASC, 
    [Column1] ASC 
)ON [PRIMARY] 

回答

0

的区别是什么以下查询:

订单?明显。

其中有影响。

查询是针对某个条件中的Column2,并且存在索引Column1,Column2,则 - 不会使用该索引。

因此,多行索引只有在它们所针对的查询具有相同顺序的相同行时才有用。您可能会错过查询中的行,但只有“在结尾”,索引将被使用,但开头的字段....意味着不使用索引。

+0

我想知道索引中列的排序是重要的还是不重要,在执行查询的性能。 –

+0

那么,我建议你阅读答案。和文件。 – TomTom

2

TomTom是正确的,但让我详细说明他的答案。考虑以下查询

SELECT * FROM MyTable WHERE Column1 = ? AND Column2 = ?; /* IX_1 will be used */ 
SELECT * FROM MyTable WHERE Column2 = ? AND Column1 = ?; /* IX_1 will be used */ 
SELECT * FROM MyTable WHERE Column1 = ?; /* IX_1 will be used */ 

只要您提供WHERE子句的索引列顺序并不重要。 SQL服务器将自行决定。考虑以下情况。

  • 索引的所有列。
  • 索引的第一列。

但是。

SELECT * FROM MyTable WHERE Column2 = ? /* IX_2 will be used */ 

对于上面的查询,MSSQL将使用你的第二个索引。