數據庫表的行格式決定了一行數據是如何進行物理存儲的,進而影響查詢和DML操作的性能。
在InnoDB中,常見的行格式有4種:
? 1、COMPACT:是MySQL 5.0之前的默認格式,除了保存字段值外,還會利用空值列表保存null值,還會記錄長字段長度列表的記錄頭信息。
? COMPACT適合處理大量包含可變長度列(如:VARCHAR、VARCHARY、BLOB和TEXT類型)的數據。
? 對于可變長度列,前768字節的數據存儲在B樹節點的索引記錄中,超出部分索引在溢出頁中。大于或等于768字節的固定長度列會被編碼為可變長度列,并可以存儲在頁外。
? 2、REDUNDANT:Redundant是MySQL 5.0版本之前的行記錄存儲方式,用的比較少,Redundant行格式會把該記錄中所有列(包括隱藏列)的長度信息都存儲到“字段長度偏移列表“中。
? 3、DYNAMIC:DYNAMIC格式在MySQL 5.7版本引入,是COMPACT格式的改進版。他保持了COMPACT格式的優點,同時在存儲大的可變長度列時更加靈活,能夠動態地選擇存儲在頁內或頁外。DYNAMIC格式適用于大部份的應用場景,并在存儲空間和性能上做了一定的平衡,其結果和COMPACT大致相同。
? 4、COMPRESSED:是MySQL 5.1中InnoDB的新特性之一,它可以在存儲數據時對數據進行壓縮,從而減少磁盤占用空間。它的缺點是增加了CPU的使用,可能會降低一些查詢的性能。COMPRERSSED行格式是在DYNAMIC行格式的基礎上添加了頁外壓縮功能。在存儲時,如果發現數據可以通過壓縮減小存儲空間,就會使用壓縮方式來存儲數據,在查詢時,會自動解壓縮數據并返回結果。
行格式 | 緊湊的存儲特性 | 增強的可變長度列存儲 | 大索引健前綴支持 | 壓縮支持 | 支持的表空間類型 | 所需文件格式 |
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 |
參考:Hollis