2013-11-25 58 views
2

當我閱讀this book,爲什麼在創建索引時使用Where子句?

我發現我可以創建一個索引,其中包含where條件。

我發現,我們可以創建這樣

Create index `<index_name>` on `<table_name>` 

或者

Create index `<index_name>` on `<table_name>` Where (`<Conditions>`) 

但我不知道的好處是什麼指標?

What are the benefits of a filtered index

的列的大部分是Where conditions用?

回答

1

在我們的一些數據庫中有幾個大表,其中有特定的列常常是空且大多數查詢訪問這些表的操作只能從表中選擇特定列不爲空的數據。

沒有對指數的過濾器,我們來索引整個表,每一行,包括我們永遠不會與我們的查詢訪問的。

隨着對索引的過濾器中,查詢的運行快得多作爲對查詢謂詞上的索引過濾器相匹配,因此優化器選擇要使用的多小得多索引。

4

顯而易見的理由這樣做是爲了使指數更具有選擇性,或者用它來應用約束:

Create unique index IX_Contacts on Contacts(User_ID) Where (IsDefault=1) 

說,對於每個User_ID,他們可能有一個,且只有一個,默認請聯繫Contacts表 - 但他們可以擁有與系統中其他約束條件允許創建的非默認聯繫人數量一樣多的聯繫人。

同樣,試圖找到用戶的默認聯繫人的查詢更有可能使用此索引,因爲它非常狹窄和有選擇性 - 如果只有10%的聯繫人是用戶的默認值,則此索引將遠小於(User_ID,IsDefault)(它也可以滿足這樣的查詢)上的索引

相關問題