嗨我正在創建一個非常大的表使用DECIMAL數據類型。它將從那裏開始並增長5000萬行,所以我關心存儲。我需要DECIMAL,因爲我需要精確的表示,並且文檔很清楚,如果您想要精確表示,則必須使用DECIMAL。Mysql DECIMAL存儲
MySQL手冊是DECIMAL存儲請求數相當清楚,說明:
在MySQL 5.0.3的,對於DECIMAL列中的值使用包9個十進制(基體10)的數字成四個字節的二進制格式表示。整數和每個值的小數部分的存儲是分開確定的。九位數的每個倍數需要四個字節,「剩餘」數字需要四個字節的一小部分。超出數字所需的存儲空間由下表給出。
剩位數字節數
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html
所以這意味着一個DECIMAL(12,4)將需要:
8個字節的整數部分和2個類型fo r'剩餘'部分共10個字節。
所以第一個問題是,不會DECIMAL(18,4)使用相同的10個字節的存儲?如果我想節省存儲空間,那麼我需要將其降至DECIMAL(9,4),這對我來說不是一種選擇。
如果是這樣,第二個問題任何想法,如果mysql處理DECIMAL(12,4)更有效率(內部)比DECIMAL(18,4)?我不認爲這個問題必然是可以回答的,但是我想我會給它一個機會!也許有人已經做了某種基準...
thx。
唐
如果不知道「節目表狀態」是一種能夠確定性地看錶行大小的方式。有可能是這列「AVG_ROW_LENGTH」。我想這就是所謂的情況下,有表中的VARCHAR()列的平均值。也許對於沒有varchar()的表格,那麼「Avg」並不是一個平均值 - 我會按照你的建議Thx做一些測試。 – 2012-02-06 02:33:35
我只是建議從一個空表,將單行填充所有可能的數據最大和節目表狀態應該告訴你,行的大小(即表中的唯一行)。也許我錯了? – StudyOfCrying 2012-02-06 17:06:34
你是對的!這工作完美。我嘗試使用不同的DECIMAL(x,y)列創建表,插入數據並使用'show table status'來查看長度是多少。謝謝! – 2012-02-08 02:51:26