我有結構化的這樣一個用戶表:數值類型和行大小在MySQL
- ID MEDIUMINT(7),
- 用戶名VARCHAR(15)
難道技術上更快如果我把它改成這個:
- ID MEDIUMINT(5),
- 用戶名VARCHAR(15)
我很困惑,因爲即使字符和數字的總行長度會更短,我假設使用的字節數是相同的。
我有結構化的這樣一個用戶表:數值類型和行大小在MySQL
難道技術上更快如果我把它改成這個:
我很困惑,因爲即使字符和數字的總行長度會更短,我假設使用的字節數是相同的。
我很困惑,因爲即使字符和數字的總行長度會更短,我假設使用的字節數是相同的。
你是正確的 - 指定的位數不不變化,一個MEDIUMINT列將用來保存值的字節數。實際上,沒有速度表現。
參考:
不,那將是沒有更快。 MEDIUMINT後的數字就是顯示寬度。它僅影響查詢結果在某些情況下顯示的方式。
MEDIUMINT之後的參數對其存儲或其支持的值的範圍沒有影響。這只是顯示寬度的提示。大多數情況下,只有當您使用ZEROFILL選項時纔有用。
CREATE TABLE foo (num MEDIUMINT(7) ZEROFILL);
INSERT INTO foo VALUES (1234);
SELECT num FROM foo;
00
MEDIUMINT始終是3個字節。
這只是一個顯示寬度。如果使用MEDIUMINT(5),它不會使用小資源,而只是使用MEDIUMINT。謝謝你的問題。我有同樣的問題。
參考: 12.2.5 Numeric Type Attributes
顯示寬度不限制值,可以是 存儲在列的範圍內。它也不會阻止比顯示寬度的列 正確顯示更寬的值。例如,指定爲SMALLINT(3)的列 的常用SMALLINT範圍爲-32768至 32767,且三位數所允許的範圍之外的值爲 ,使用三位以上的數字完整顯示。