2010-11-16 40 views
2

我有一個需要過濾兩列的表[table]:[column1]和[column2]。在SQL Server上進行多列查詢的多列索引優化

在我的節目,我喜歡執行一個查詢:

select * from [table] where [column1] = 'foo' and [column2] = 'bar'; 

這是更快:

  1. 創建兩個指標,一個在每一列。 ([column1]和[column2])
  2. 創建一個包含兩列的索引。 ([column1] + [column2])

這個問題一直困擾着我一段時間,我不知道如何查詢優化工作,以及SQL Server如何使用創建的索引來加快查詢。

回答

3

第二個是總是更快此查詢 - 但你需要首先把更多的選擇之一(在索引的順序),以惠及更多。唯一的例外是,如果出於性能原因,SQL決定使用聚集索引,以便忽略非聚集索引。

兩個值的組合創建了一個更具選擇性的標準。此外,它還有助於提高績效,因爲覆蓋指數不需要BOOKMARK LOOKUP

書籤查找是主要性能下降的來源,這就是爲什麼覆蓋索引總是優於2個索引的原因。

UPDATE

請記住,如果你有你的索引列1 + coulmn2,搜索上​​只是COLUMN2不能使用該索引,所以你需要在COLUMN2一個單獨的索引以及。

3

這要看!

這取決於這些列的選擇性。

如果您是而不是選擇所有列'*',您可以使用一個非常快速的覆蓋索引,它包含where子句列和INCLUDE' SELECT列表中的列。