2009-04-16 49 views

回答

6

你期望有很多重複的字符串嗎?如果不是,那麼正常化將不會產生任何結果。如果是的話,那麼你擁有的重複就越多,索引變得越不有效。 (因爲具有相同索引的所有項目必須檢索)

如果你的數據庫引擎支持它,你可以簡單地設置字符串作爲一個聚集索引,在這種情況下,相似的字符串將被儲存在彼此。

而且如果你已經有兩個列的索引,並比較兩者,您收到的指數的全部好處。

+0

如何設置爲聚簇索引? – zsharp 2009-04-16 04:54:14

1

這實際上聽起來很容易測試。

你可以設置表兩種方式,產生的100,000個隨機行,運行對陣雙方一些查詢,看看哪個更快。

2

如果您確實需要字符串值,那麼答案是否定的。

比較一個數據庫中的字符串是不是比較一個int,然後查找從INT字符串便宜。

至於字符串的重複,你有更多的重複,那麼你就需要,如果他們非規範化的存儲空間更少。但它仍然會變慢。

如果您正在尋找在存儲性能,然後用字符串,整數PK堅持。

0

如果您使用的是Oracle,您不妨探討使之成爲一個索引組織表COMPRESS 1

Oracle docs

指定壓縮到使關鍵 壓縮,從而消除重複 索引組織表中的主鍵列 值的發生。使用 整數指定前綴長度, 這是要壓縮的前綴列數 。

0

指標進行快速搜索可能的。但是請記住,如果數據庫知道所有最重要的字段,則只能使用該索引。例如,如果你有一個索引:

int, string 

則數據庫可以使用索引來搜索一個int,或者用於int和字符串的組合。但它不能用它來搜索一個字符串。

如果創建兩個單獨的索引:

index 1: int 
index 2: string 

則數據庫可以有效地爲int和/或搜索字符串。

您是否對錶格進行規範化並不重要。規範化通常會減慢搜索速度,因爲它會強制查找不同的表。

1

該表已標準化。

將字符串更改爲int不是進一步的規範化。

這可能看起來很挑剔,但「正常化」這個詞已經被過度使用到了它變得毫無意義的地步。