我在讀MySQL文檔,我想知道MyISAM's "static" table format是否也適用於InnoDB?如果我使用CHAR
而不是VARCHAR
,當真實長度在0到100個字符之間變化或使用VARCHAR(100)
更好時,我會獲得性能嗎?InnoDB是否有靜態表?
1
A
回答
2
的InnoDB確實有固定寬度行,可以有一些優勢,宣佈在表中作爲固定寬度的所有列。主要優點是頁面中的所有「孔」都可以重複用於任何插入,因爲所有行都具有相同的長度。這使得空間重用更有效率。儘管如此,我不會試圖對任何超過幾十字節的字符串強制固定寬度,因爲每個頁面存儲額外數據的成本(因此每頁頁面的行數較少)將很快壓倒您從更多獲得的任何節省/收益高效的空間重用。
然而,具有固定寬度的行而不是允許對行掃描進行任何優化(就像MyISAM所做的那樣)。 InnoDB的行存儲始終是基於頁面的,並使用帶有雙向鏈接的頁面列表的B +樹和頁面內的單鏈接記錄。行遍歷總是使用這些結構,不能以任何其他方式完成。
0
對於CHAR
字段,您分配的內容正是您所得到的。例如,CHAR(15)
分配並存儲15個字節,無論您在該字段中放置了多少個字符。字符串操作非常簡單直接,因爲數據字段的大小是完全可預測的。
隨着VARCHAR
字段,你會得到一個完全不同的故事。例如,VARCHAR(15)
實際上可以動態分配多達16個字節,數據最多15個,並且至少需要1個額外的字節來存儲數據的長度。如果你的字符串是'hello',那麼需要6個字節,而不是5個。字符串操作在任何情況下都必須執行某種形式的長度檢查。
我希望這是對你有用
相關問題
- 1. 優化innodb表:是或否?
- 2. * .lib - 是否靜態?
- 3. 是否machine.config是靜態的?
- 4. 公共靜態與靜態公共 - 是否有區別?
- 5. 網址末尾是否有.html表示網頁是靜態的?
- 6. 是否有替代getClass()。getResource()靜態ImageIcon
- 7. 檢查類是否有靜態方法
- 8. 是否有靜態方法的原因?
- 9. D中是否有靜態打印?
- 10. Elixir中是否有非靜態函數?
- 11. 靜態constexpr變量是否有意義?
- 12. 是否靜態讓它慢
- 13. 使用「最終靜態」還是「靜態最終」是否正確?
- 14. 是否有可能強制崩潰MySQL Innodb表?
- 15. 如何檢查MySQL表是否爲UTF-8並具有storageEngine InnoDB?
- 16. cmake檢查庫是否是靜態的
- 17. .htaccess - 是否可以有靜態和動態url的組合?
- 18. 是否有允許靜態和動態打字的語言?
- 19. 是否有靜態父母(靜態鏈接)的開源解釋器實現?
- 20. 在非靜態類中鎖定靜態變量是否安全?
- 21. PHP - 是否可以聲明靜態和非靜態方法
- 22. PHP靜態字段是否真實靜態?
- 23. 靜態後期綁定是否需要重載靜態變量?
- 24. 代表是否默認爲靜態代表?
- 25. make方法makeEvent()是否有任何優點是靜態的?
- 26. Collection中是否有對象不是靜態的?
- 27. 是t1靜態還是非靜態?
- 28. 是否有可能擁有共享/靜態依賴屬性?
- 29. 除D之外還有其他語言是否有靜態if?
- 30. 是否有可能在C++中有一個靜態字段?
我知道所有這些,但InnoDB有這些靜態表的文章是關於? – Firze