2010-11-03 70 views
7

我問過谷歌,但我仍然感到困惑。索引varchar列

1)索引Varchar列是否存在問題。當我不應該,以及當我應該

2)索引char列VS Varchar列。

感謝

+0

如果你可以支持現有的答案,或者有一些補充,請做到這一點。 – Costa 2010-11-07 09:44:54

回答

4

1 - 指數,如果要查詢它,它有足夠的選擇性。如果它是一個90%的數值相同的列,那就沒有多少意義。

2 - 這不是問題,但我猜你想知道你是否應該。是的,如果你查詢它並且符合上述標準。

+1

事實上,索引(N)varchar列工作正常。只有gotcha纔會注意900字節的寬度限制 – StuartLC 2010-11-03 15:31:35

+0

有varchar(max)和nvarchar(max)的索引問題,這就是爲什麼不應該使用它們的原因,除非你打算溢出普通varchar和nvarchar的大小領域。 – HLGEM 2010-11-03 15:44:06

+0

@HLGEM - 你能詳細點嗎? – JNK 2010-11-03 15:51:29

0

總體性能

理論上/設計,你有一個合乎邏輯的模型,其中,比如,用戶名是獨一無二的。

但是,在執行時,您知道使用這種方法比使用作爲索引更高效的替代「userid」列更昂貴(例如,重音,長度等)。說這個,無論如何你都會有一個名字索引,因爲它應該是唯一的。

區別在於您使用此索引的位置:如果它在子表中作爲外鍵列,這不是一個好主意。或者作爲聚集索引。

作爲沒有FK的表的單個索引,那麼它既不在這裏也不在那裏。

最後,我只是使用char/varchar來填充ISO語言或貨幣代碼(DE,EN,GBP,CHF等)。但我的切斷而變化,說實話......

4
  • 廣告1)是的,900個字節的限制,巨大的按鍵,大量的索引頁,大量的I/O參與,效率低下的索引操作。結論:不要,除非你的varchar最多約50個字符。
  • 廣告2)同1 charvarchar之間的真正區別是固定的大小與可變大小(即char(100))總是在數據頁100個字節,varchar(100)最多需要100)