2014-02-06 90 views

回答

2

的InnoDB確實有固定寬度行,可以有一些優勢,宣佈在表中作爲固定寬度的所有列。主要優點是頁面中的所有「孔」都可以重複用於任何插入,因爲所有行都具有相同的長度。這使得空間重用更有效率。儘管如此,我不會試圖對任何超過幾十字節的字符串強制固定寬度,因爲每個頁面存儲額外數據的成本(因此每頁頁面的行數較少)將很快壓倒您從更多獲得的任何節省/收益高效的空間重用。

然而,具有固定寬度的行而不是允許對行掃描進行任何優化(就像MyISAM所做的那樣)。 InnoDB的行存儲始終是基於頁面的,並使用帶有雙向鏈接的頁面列表的B +樹和頁面內的單鏈接記錄。行遍歷總是使用這些結構,不能以任何其他方式完成。

0

對於CHAR字段,您分配的內容正是您所得到的。例如,CHAR(15)分配並存儲15個字節,無論您在該字段中放置了多少個字符。字符串操作非常簡單直接,因爲數據字段的大小是完全可預測的。

隨着VARCHAR字段,你會得到一個完全不同的故事。例如,VARCHAR(15)實際上可以動態分配多達16個字節,數據最多15個,並且至少需要1個額外的字節來存儲數據的長度。如果你的字符串是'hello',那麼需要6個字節,而不是5個。字符串操作在任何情況下都必須執行某種形式的長度檢查。

我希望這是對你有用

+0

我知道所有這些,但InnoDB有這些靜態表的文章是關於? – Firze

相關問題