mysql MyISAM表的儲存格式

2021-06-12 10:29:24 字數 1099 閱讀 4779

myisam支援三種不同的儲存格式:固定格式,動態格式,已壓縮格式(只能使用myisampack工具來建立)。

靜態表特徵(固定格式)

靜態格式是myisam表的預設儲存格式。當表不包含變數長度列(varchar, blob, 或text)時,使用這個格式。每一行用固定位元組數儲存。靜態格式是三種儲存格式中最簡單和最安全的,同時也是最快的ondisk格式。

基本特徵:

(1)char列對列寬度為空間填補。

(2)快速。

(3)容易快取。

(4)由於每個記錄位置固定,崩潰後容易重建。(5)無必要重新組織,通常比動態表需要更大的磁碟空間。

動態表特徵(動態格式)

如果乙個myisam表包含任何可變長度 列(varchar, blob或textdynamic),或者如果乙個表被用row_format=dynamic選項來建立,動態儲存格式被使用。

基本特徵:

(1)除了長度少於4的列之外,所有的字串列儲存為動態。

(2)每個記錄前儲存乙個位圖,該位圖表明哪一列包含空字串(對於字串列)或者0(對於數字列),但並不包括包含null值的列。而非空字串列,則會被存為乙個長度位元組加字串的內容。

(3)動態格式表在崩潰後要比靜態格式表更難重建,因為乙個記錄可能被分為多個碎片且鏈結(碎片)可能被丟失。

(4)每個記錄僅使用必需大小的空間。儘管如此,如果乙個記錄變大,它就按需要被分開成多片,造成記錄碎片的後果。比如,你用擴充套件行長度的資訊更新一行,該行就變得有碎片。在這種情況下,你可以時不時執行optimize tablemyisamchk -r來改善效能。可使用myisamchk -ei來獲取表的統計資料。

已壓縮表特徵

mysql分發版本裡預設包含myisampack工具,已壓縮儲存格式是由它建立的唯讀格式。

壓縮表有下列特徵:

(1)壓縮表佔據很小的磁碟空間,最小化了磁碟用量。

(2)每個記錄被單獨壓縮,訪問開支小。

(3)可以處理固定長度或動態長度記錄。

(參考自 mysql官方文件)

mysql MYISAM表批量壓縮

關於對myisam表的壓縮,可以使用myisampack和myisamchk完成 myisampack完之後必須進行myisamchk才能使用壓縮後的表,而且是唯讀的 其詳細地用法可以參考官方文件 這兩個操作需要謹慎使用,在壓縮之前需要確認mysqld已關閉或者要壓縮的表不會有其他的sql操作 而且...

MySQL myisam表的索引結構以及查詢過程

myisam用的是非聚集索引方式,即資料和索引落在不同的兩個檔案上 myd是資料檔案 myi是索引檔案 myisam在建表時以主鍵作為key來建立主索引b 樹,樹的葉子節點存的是對應資料的實體地址。我們拿到這個實體地址後,就可以到myisam資料檔案中直接定位到具體的資料記錄了。當我們為某個字段新增...

Mysql MyISAM引擎分表(水平拆分)

應用場景 1.查的多,寫的少 基於引擎特性,索引檔案與元資料檔案分別儲存 2.資料量過高 功能介紹myisam引擎分表功能是 基於建立多個子表,由主表關聯而形成的分表功能,該主表可以視為空殼,來引導儲存到子表 表1 create table union user 1 id bigint 21 not...