MySQL的InnoDB存儲引擎支持哪幾種行格式?
數據庫表中的行格式決定了數據在物理存儲時的布局方式,進而對查詢和DML操作的性能產生影響。
在InnoDB存儲引擎中,常見的行格式主要包括以下四種:
- COMPACT:在MySQL 5.0之前是默認的格式,除了存儲字段值外,還會利用空值列表來保存null值,同時記錄變長字段長度列表和記錄頭信息。
圖片
COMPACT適用于處理大量包含可變長度列(如VARCHAR、VARBINARY、BLOB和TEXT類型)數據。
對于可變長度列,前768字節(jié)的數據存儲在B樹節(jié)點的索引記錄中,超出部分存儲在溢出頁中。大于或等于768字節(jié)的固定長度列會被編碼為可變長度列,可以存儲在頁外。
- REDUNDANT:在MySQL 5.0版本之前,InnoDB使用的行記錄存儲方式,較少使用。Redundant 行格式會將該記錄中所有列(包括隱藏列)的長度信息存儲在“字段長度偏移列表”中。
圖片
image.png
- DYNAMIC:MySQL 5.7版本引入的DYNAMIC格式是COMPACT格式的升級版本。它延續(xù)了COMPACT格式的優(yōu)勢,在處理大型可變長度列時更具靈活性,能夠靈活選擇將數據存儲在頁內還是頁外。DYNAMIC格式適用于多數應用場景,在存儲空間和性能之間取得了一定的平衡。其結構與COMPACT格式大致相似;
- COMPRESSED:作為MySQL 5.1中InnoDB的新增特性之一,壓縮功能能夠減小數據在磁盤上的占用空間。然而,其缺點在于增加了CPU的負擔,可能導致部分查詢性能下降。COMPRESSED行格式在DYNAMIC行格式的基礎上引入了頁外壓縮功能。在存儲數據時,如果發(fā)現可以通過壓縮來減小存儲空間,系統(tǒng)將選擇壓縮方式來存儲數據。在查詢時,數據將會被自動解壓并返回結果。
- BARRACUDA:作為MySQL 5.7引進的一種新格式,相較于前述格式,支持更多高級特性,包括動態(tài)行格式、逐行壓縮以及空間管理等功能。
對比:
行格式 | 緊湊的存儲特性 | 增強的可變長度列存儲 | 大索引鍵前綴支持 | 壓縮支持 | 支持的表空間類型 | 所需文件格式 |
REDUNDANT | 否 | 否 | 否 | 否 | system, file-per-table, general | Antelope or Barracuda |
COMPACT | 是 | 否 | 否 | 否 | system, file-per-table, general | Antelope or Barracuda |
DYNAMIC | 是 | 是 | 是 | 否 | system, file-per-table, general | Barracuda |
COMPRESSED | 是 | 是 | 是 | 是 | file-per-table, general | Barracuda |