2010-07-08 38 views
1

我有結構化的這樣一個用戶表:數值類型和行大小在MySQL

  • ID MEDIUMINT(7),
  • 用戶名VARCHAR(15)

難道技術上更快如果我把它改成這個:

  • ID MEDIUMINT(5),
  • 用戶名VARCHAR(15)

我很困惑,因爲即使字符和數字的總行長度會更短,我假設使用的字節數是相同的。

回答

5

我很困惑,因爲即使字符和數字的總行長度會更短,我假設使用的字節數是相同的。

你是正確的 - 指定的位數不變化,一個MEDIUMINT列將用來保存值的字節數。實際上,沒有速度表現。

參考:

1

不,那將是沒有更快。 MEDIUMINT後的數字就是顯示寬度。它僅影響查詢結果在某些情況下顯示的方式。

3

MEDIUMINT之後的參數對其存儲或其支持的值的範圍沒有影響。這只是顯示寬度的提示。大多數情況下,只有當您使用ZEROFILL選項時纔有用。

CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL); 
INSERT INTO foo VALUES (1234); 
SELECT num FROM foo; 

00

MEDIUMINT始終是3個字節。

0

這只是一個顯示寬度。如果使用MEDIUMINT(5),它不會使用小資源,而只是使用MEDIUMINT。謝謝你的問題。我有同樣的問題。

參考: 12.2.5 Numeric Type Attributes

顯示寬度不限制值,可以是 存儲在列的範圍內。它也不會阻止比顯示寬度的列 正確顯示更寬的值。例如,指定爲SMALLINT(3)的列 的常用SMALLINT範圍爲-32768至 32767,且三位數所允許的範圍之外的值爲 ,使用三位以上的數字完整顯示。