2009-12-21 91 views
1

當爲特定查詢創建索引時,最好將where子句中的所有列索引,然後在「包含的列」部分中選擇任何列?我應該離開索引的位列嗎?SQL Server索引問題

回答

1

經典 「這取決於」 的位。如果你包含它們,那麼你正在創建一個覆蓋索引,這將會更加有效,但同樣的,你會因行插入,刪除和一些更新而受到懲罰。

您還要爲磁盤空間付出代價,因此如果要在大型表中包含非常寬的列,則需要平衡存儲開銷與性能增益的增加。

所有的事情都是平等的,覆蓋指數通常是一件好事,但有些警告,如其他操作的空間和開銷需要注意。

+0

在這個特定的數據庫中,插入/更新/刪除操作只能在半夜每天執行一次,所以我願意對該性能產生影響。知道它看起來像是一個覆蓋指數將是當時的路? – 2009-12-21 17:49:05

+0

聽起來更像是DW或Hybrid,而不是純OLTP,因此覆蓋索引可能對您有利 - 但它確實是YMMV。 – Andrew 2009-12-21 19:17:08

+0

是的,這是一個DW。因人而異? – 2009-12-22 07:02:47