2009-09-02 96 views
0

在索引/查詢等方面,其中一個的性能優於另一個嗎?數據庫字段的比較/性能爲int vs char(1)

例如聲明列 活躍CHAR(1)以 'Y'/ 'N' 值 VS 與價值觀IS_ACTIVE TINYINT 1/0

有傳言說人們似乎更喜歡使用CHAR(1) ,而大多數地方我傾向於宣佈他們爲tinyint/int不是最少的,因爲它易於使用/類型

任何真正的性能比較呢? 我記得像甲骨文二進制值索引(位圖索引或一些這樣的) - 有什麼類似的sql2005/sql2008/...?

更新 - 在迴應一些下面的意見,性能會在索引查詢/更新定義的,存儲是無關緊要的考慮是夠便宜

語義太不相關!

回答

3

與CHAR/VARCHAR。任何一列有送你通過所有的信件翻譯/整理等索引期間,平等測試的語義額外的內部代碼的潛力等

因此,一些更好。並且是您描述的情況的最佳解決方案 - 它只存儲0或1(當然可以爲空)。

SQL服務器確實崩潰位字段內部最多可存儲在每個字節8個字段,所以如果你有多個位字段,它比TINYINT更高效:

http://msdn.microsoft.com/en-us/library/ms177603.aspx

+0

位域無法被索引......因此無法用於查詢....因此tinyint/smallint/int/bigint列也會出現語義問題! – Kumar 2009-09-02 20:18:56

+0

你*可以*索引位字段,它只是沒有什麼好處,因爲只有兩個值!如果您將兩個值存儲在其他某種列中並對其進行索引,那麼該索引執行的效果會很差。 – richardtallent 2009-09-03 08:12:57

+0

更多信息: http:// stackoverflow。com/questions/231125/should-i-index-a-bit-field-in-sql-server – richardtallent 2009-09-03 08:13:33

1

有沒有Oracle中的整數或邏輯數據類型。位圖索引與從其他數據類型的列值派生出來的東西是不同的。

0

如果所有的RDBMS產品都支持布爾數據類型,那就太好了。然後我們可以殺掉這個問題。事實上,這歸結於個人的品味。我覺得更容易理解......

if is_active = 'Y' then 

...不是...

if is_active = 1 then 

但是,如果我說的不是英語法語我希望它是O/N,而1/0實現是通用的。關鍵是在整個系統中使用一個單一的約定。

關於性能,如果你最大的瓶頸是char(1)和integer之間的差異,那麼我向你的調整能力致敬。

+0

不是一個瓶頸,因爲該系統尚未實現...但是,這是一個實時風險mgmt應用程序每毫秒的提升將是很好的 – Kumar 2009-09-02 20:21:19