假設我有一個極大行5個字段的數據庫 - State
(A)City
(B),Category
(C),Subcategory
(d)和ID
(E)。我將與極大數的查詢等SELECT ID
打它,與WHERE
條款,可以包含以下內容,用AND
連接一起:最有效的方法做選擇分層查詢 - SQL服務器2014
A
A,B
A,C
A,B,C
A,C,D
A,B,C,D
C
C,D
換言之,它將只包括B,如果它包括A,和僅包括d如果它包含C,由於列的層次結構的性質。其中每個都會返回一個ID列表,這可能是許多行。
下面的技術會有好處嗎?
上
(A,B)
與化合物聚集索引上(C,D)
創建兩個表,一個(
X
)與化合物聚簇索引,而另一個(Y
)上以我的查詢的一部分{A,B}
(如果有的話)並擊中X
;把我的查詢的一部分對{C,D}
(如果有的話)和 對。如果我打兩個表(即查詢包含的
{A,B}
和{C,D}
兩個部分),則相交於ID
兩個表。
這會比僅對整個表進行完全查詢更高效嗎?我是否也應該在X
和Y
上爲ID
製作第二個非聚集索引?
不要以爲你可以通過分解成單獨的表來取代查詢優化器,從而分解成臨時表的特殊有序處理等。大多數情況下,如果你正確索引表(並且可能包括分區表),一切只是在封面下工作,你不需要複雜的過程。有時你需要使它變得複雜,但是首先嚐試正確的索引。 –