-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將使用你的第二個索引。