2012-12-26 70 views
2

我有一張表,我在其中一個INT類型的列中創建了一個聚簇索引。我想創建一個非聚集索引來提高查詢的性能。但是,我沒有任何類型的列int在varchar類型的列上創建非聚簇索引是否好?

因此,我想在varchar類型列上創建一個非聚簇索引。

Varchar類型的列上創建索引會很好嗎?它有助於提高查詢的性能嗎?我知道在varchar類型列上創建索引並不是一件好事,但只是想知道它是否會提高查詢性能。

+1

「我知道在varchar類型的列上創建索引不是一件好事」您是在哪裏看到的? – Bort

+0

好嗎?這取決於你的查詢。如果你不打算使用索引,不,這是不好的。 – Oded

+0

如果你想知道索引是否會改善事情,你需要測試。在更改之前和更改之後檢查查詢計劃(刪除之間的統計數據,以便您比較喜歡)。我建議看一看:[返回目錄基礎知識:如何更快地製作SELECT語句(視頻)](http://www.brentozar.com/archive/2012/10/back-index-basics-how-make-select-聲明更快的視頻/)。 – Oded

回答

8

在VARCHAR列或一組列上創建索引沒有任何問題。

關於VARCHAR/INT的性能,與RDBMS中的所有內容一樣,它取決於您在做什麼。您可能會想到的事實是,對VARCHAR鍵上的表進行集羣(在SQL Server中)的效率比單調遞增的數字鍵上的集羣稍微低一些,並且可能引入碎片。

或者你可能會想到你聽說過在VARCHAR列上寫入JOIN,這是真的,它比JOIN在數值類型上效率稍低,但效率稍低,沒有什麼導致你永遠不會加入varchar cols。

這並不意味着您不應該在VARCHAR列上創建索引。 VARCHAR列上的所需索引將提高查詢性能,通常會提高數量級。如果您需要VARCHAR上的索引,請創建它。試圖找到一個整數列來創建索引是沒有意義的 - 引擎永遠不會使用它。

相關問題