2010-08-14 51 views
1

INFORMIX-SE 7.1:CHAR(5)與INT

假設COL5 CHAR(5)將只從00001到99999包含數字:

  1. 一個CHAR(5)列使用5個字節的存儲,INTEGER使用多少個字節?
  2. INT列上的UNIQUE INDEX的執行速度是否比CHAR(5)快?
  3. INT列上的SELECT MAX()比COL5 CHAR(5)上的MAX()更快嗎?

回答

1
  • INFORMIX-SE 7.1:

更接近受支持的版本(比4.10或2.10),但仍有十年甚至更長時間沒有支持。

假設COL5 CHAR(5)將只從00001到99999包含數字:

  1. (5)列使用5個字節存儲的CHAR,多少字節的不使用INTEGER?
  2. INT列上的UNIQUE INDEX的執行速度是否比CHAR(5)快?
  3. INT列上的SELECT MAX()比COL5 CHAR(5)上的MAX()更快嗎?
  1. 4個字節用於在Informix DBMS INTEGER。
  2. 勉強。它是否真正可衡量是有爭議的,但比較的數據略少(少一個字節),所以做的不多。
  3. 同樣,不太可能有可測量的差異。如果列上有索引,則兩個操作都只是訪問索引。如果沒有索引,那麼這兩個操作最終都會讀取表(表掃描),並且處理5個字符而不是4個字節會造成很小的損失。
2

INT uses 4 bytes.你還可以用INT

存儲0 ... 4294967295(無符號)順便說一下,我不會用CHARVARCHAR,或任何字符串-Y類型來存儲數字。你只是在這裏要求麻煩。例如,如果使用字符串比較,則9大於10。你也會錯過很多算術運算。

+1

此列上沒有算術運算符,它的票號根據行更新的方式而不同,票號會改變。 – 2010-08-14 13:28:32

4

CHAR(5)將始終使用5個字節的空間(在多字節編碼10從MySQL 4.1),因爲每個字符可以存儲255個不同的字符(或者多字節編碼甚至更多)。

一個無符號的SMALLINT(0..65535)將需要2個無符號的MEDIUMINT(0 .... 16,7 Million)3個字節。

底線:對數值數據使用CHAR類型總是浪費空間。

至於其他兩個問題:

是否在一個INT列的唯一索引的性能比CHAR(5)速度更快?

非常,非常有可能是的,因爲索引並不需要是字母數字字符,可以與數據

量較小的工作是SELECT MAX()在INT列比快MAX()在col5 CHAR(5)上?

可能是,因爲對CHAR列運行一個數值函數,類型轉換,必須對每記錄執行。

參考: