我有一個大約19列的表,其中包含合理的大量數據,主要是使用基於不同where子句的select語句來查詢數據以檢索數據。由於這個表主要是查詢獲取數據,所以我考慮根據查詢中使用的不同where子句創建非聚集索引。此外,所有獲取查詢都將返回表中的所有列作爲選擇列表的一部分。基於以上信息,我有選擇的指標兩個問題:非聚簇覆蓋索引列選擇規則
讓我們假設我們有以下的SP作爲查詢:
where [col_a] = {value} and [col_b] = {value} [col_b] = {value} and [col_a] = {value} [col_a] = {value} and [col_c] = {value} and [col_d] = {value} [col_a] = {value} and [col_c] = {value}
我已經創建了下面的非聚集索引在桌子上作爲
[爲col_a]和[col_b] - >會在第一SP仍然使用這個索引作爲 次序被逆轉
[col_a]和[col_c]和[col_d] - >如果最後一個SP使用此索引 ,因爲前兩列與訂單匹配
另外,我們是否應該繼續嘗試定義非聚集索引在表上獲取SP的過濾器/連接子句?
由於所有SP中的選擇列表都會返回整個列的列表,因此我將表中的所有列添加爲非聚集索引(覆蓋索引)中的包含列以避免書籤查找。這種方法是否正確?這種情況下的空間含義是什麼?因爲我們將所有表列存儲爲索引定義的一部分?