MyISAM表的儲存格式---行格式
MyISAM表的儲存格式
1. 靜態(固定長度)表特徵
2. 動態表特徵
3. 已壓縮表特徵
MyISAM支援三種不同儲存格式。其中兩個(固定格式和動態格式)根據正使用的列的型別來自動選擇。第三個,即已壓縮格式,只能使用myisampack工具來建立。
當你CREATE或ALTER一個沒有BLOB或TEXT列的表,你可以用ROW_FORMAT表選項強制表的格式為FIXED或DYNAMIC。這會導致CHAR和VARCHAR列因FIXED格式變成CHAR,或因DYNAMIC格式變成VARCHAR。
通過用ALTER TABLE指定ROW_FORMAT={COMPRESSED | DEFAULT},你可以壓縮或解壓縮表,請參閱13.1.5節,“CREATE TABLE語法”。
1. 靜態(固定長度)表特徵(FIXED)
靜態格式是MyISAM表的預設儲存格式。當表不包含變數長度列(VARCHAR, BLOB, 或TEXT)時,使用這個格式。每一行用固定位元組數儲存。
MyISAM的三種儲存格式中,靜態格式就最簡單也是最安全的(至少對於崩潰而言)。靜態格式也是最快的on-disk格式。快速來自於資料檔案中的行在磁碟上被找到的容易方式:當按照索引中的行號查詢一個行時,用行長度乘以行號。同樣,當掃描一個表的時候,很容易用每個磁碟讀操作讀一定數量的記錄。
當MySQL伺服器正往一個固定格式MyISAM檔案寫的時候,如果計算機崩潰了,安全是顯然的。在這種情況下,myisamchk可以容易地決定每行從哪裡開始到哪裡結束,所以它通常可以收回所有記錄,除了寫了一部分的記錄。注意,基於資料行,MyISAM表索引可以一直被重新構建。
靜態格式表的一般特徵:
· CHAR列對列寬度是空間填補的。
· 非常快。
· 容易快取。
· 崩潰後容易重建,因為記錄位於固定位置。
· 重新組織是不必要的,除非你刪除巨量的記錄並且希望為作業系統騰出磁碟空間。為此,可使用OPTIMIZE TABLE或者myisamchk -r。
· 通常比動態格式表需要更多的磁碟空間。
2. 動態表特徵(DYNAMIC)
如果一個MyISAM表包含任何可變長度列(VARCHAR, BLOB或TEXTDynamic),或者如果一個表被用ROW_FORMAT=DYNAMIC選項來建立,動態儲存格式被使用。
這個格式更為複雜一點,因為每行有一個表明行有多長的頭。當一個記錄因為更新的結果被變得更長,該記錄也可以在超過一個位置處結束。
你可以使用OPTIMIZE TABLE或myisamchk來對一個表整理碎片。如果在一個表中有你頻繁訪問或改變的固定長度列,表中也有一些可變長度列,僅為避免碎片而把這些可變長度列移到其它表可能是一個好主意。
動態格式表的一般特徵:
· 除了長度少於4的列外,所有的字串列是動態的。
· 在每個記錄前面是一個點陣圖,該點陣圖表明哪一列包含空字串(對於字串列)或者0(對於數字列)。注意,這並不包括包含NULL值的列。如果一個字元列在拖曳空間移除後長度為零,或者一個數字列為零值,這都在點陣圖中標註了且列不被儲存到磁碟。 非空字串被存為一個長度位元組加字串的內容。
· 通常比固定長度表需要更少的磁碟空間。
· 每個記錄僅使用必需大小的空間。儘管如此,如果一個記錄變大,它就按需要被分開成多片,造成記錄碎片的後果。比如,你用擴充套件行長度的資訊更新一行,該行就變得有碎片。在這種情況下,你可以時不時執行OPTIMIZE TABLE或myisamchk -r來改善效能。可使用myisamchk -ei來獲取表的統計資料。
· 動態格式表在崩潰後要比靜態格式表更難重建,因為一個記錄可能被分為多個碎片且連結(碎片)可能被丟失。
· 動態尺寸記錄期望的行長度用下列表示式來計算:
· 3
· + (number of columns + 7) / 8
· + (number of char columns)
· + (packed size of numeric columns)
· + (length of strings)
· + (number of NULL columns + 7) / 8
對每個連結需要額外的6位元組。在一個更新導致一個記錄的擴大之時,一個動態記錄被連結了。每個新連結至少是20位元組,所以下一個擴大可能在同樣的連結裡進行。如果不是,則另一個連結將被建立。你可以使用myisamchk -ed來找出連結的數目。所有的連結可以用myisamchk -r來移除。
1. 靜態(固定長度)表特徵
2. 動態表特徵
3. 已壓縮表特徵
MyISAM支援三種不同儲存格式。其中兩個(固定格式和動態格式)根據正使用的列的型別來自動選擇。第三個,即已壓縮格式,只能使用myisampack工具來建立。
當你CREATE或ALTER一個沒有BLOB或TEXT列的表,你可以用ROW_FORMAT表選項強制表的格式為FIXED或DYNAMIC。這會導致CHAR和VARCHAR列因FIXED格式變成CHAR,或因DYNAMIC格式變成VARCHAR。
通過用ALTER TABLE指定ROW_FORMAT={COMPRESSED | DEFAULT},你可以壓縮或解壓縮表,請參閱13.1.5節,“CREATE TABLE語法”。
1. 靜態(固定長度)表特徵(FIXED)
靜態格式是MyISAM表的預設儲存格式。當表不包含變數長度列(VARCHAR, BLOB, 或TEXT)時,使用這個格式。每一行用固定位元組數儲存。
MyISAM的三種儲存格式中,靜態格式就最簡單也是最安全的(至少對於崩潰而言)。靜態格式也是最快的on-disk格式。快速來自於資料檔案中的行在磁碟上被找到的容易方式:當按照索引中的行號查詢一個行時,用行長度乘以行號。同樣,當掃描一個表的時候,很容易用每個磁碟讀操作讀一定數量的記錄。
當MySQL伺服器正往一個固定格式MyISAM檔案寫的時候,如果計算機崩潰了,安全是顯然的。在這種情況下,myisamchk可以容易地決定每行從哪裡開始到哪裡結束,所以它通常可以收回所有記錄,除了寫了一部分的記錄。注意,基於資料行,MyISAM表索引可以一直被重新構建。
靜態格式表的一般特徵:
· CHAR列對列寬度是空間填補的。
· 非常快。
· 容易快取。
· 崩潰後容易重建,因為記錄位於固定位置。
· 重新組織是不必要的,除非你刪除巨量的記錄並且希望為作業系統騰出磁碟空間。為此,可使用OPTIMIZE TABLE或者myisamchk -r。
· 通常比動態格式表需要更多的磁碟空間。
2. 動態表特徵(DYNAMIC)
如果一個MyISAM表包含任何可變長度列(VARCHAR, BLOB或TEXTDynamic),或者如果一個表被用ROW_FORMAT=DYNAMIC選項來建立,動態儲存格式被使用。
這個格式更為複雜一點,因為每行有一個表明行有多長的頭。當一個記錄因為更新的結果被變得更長,該記錄也可以在超過一個位置處結束。
你可以使用OPTIMIZE TABLE或myisamchk來對一個表整理碎片。如果在一個表中有你頻繁訪問或改變的固定長度列,表中也有一些可變長度列,僅為避免碎片而把這些可變長度列移到其它表可能是一個好主意。
動態格式表的一般特徵:
· 除了長度少於4的列外,所有的字串列是動態的。
· 在每個記錄前面是一個點陣圖,該點陣圖表明哪一列包含空字串(對於字串列)或者0(對於數字列)。注意,這並不包括包含NULL值的列。如果一個字元列在拖曳空間移除後長度為零,或者一個數字列為零值,這都在點陣圖中標註了且列不被儲存到磁碟。 非空字串被存為一個長度位元組加字串的內容。
· 通常比固定長度表需要更少的磁碟空間。
· 每個記錄僅使用必需大小的空間。儘管如此,如果一個記錄變大,它就按需要被分開成多片,造成記錄碎片的後果。比如,你用擴充套件行長度的資訊更新一行,該行就變得有碎片。在這種情況下,你可以時不時執行OPTIMIZE TABLE或myisamchk -r來改善效能。可使用myisamchk -ei來獲取表的統計資料。
· 動態格式表在崩潰後要比靜態格式表更難重建,因為一個記錄可能被分為多個碎片且連結(碎片)可能被丟失。
· 動態尺寸記錄期望的行長度用下列表示式來計算:
· 3
· + (number of columns + 7) / 8
· + (number of char columns)
· + (packed size of numeric columns)
· + (length of strings)
· + (number of NULL columns + 7) / 8
對每個連結需要額外的6位元組。在一個更新導致一個記錄的擴大之時,一個動態記錄被連結了。每個新連結至少是20位元組,所以下一個擴大可能在同樣的連結裡進行。如果不是,則另一個連結將被建立。你可以使用myisamchk -ed來找出連結的數目。所有的連結可以用myisamchk -r來移除。
相關文章
- Mysql 行的儲存格式MySql
- Nebula Storage 2.0 儲存格式
- hive檔案儲存格式Hive
- oracle儲存過程書寫格式Oracle儲存過程
- redis-5.資料儲存格式Redis
- OceanBase 儲存層程式碼解讀(二)微塊儲存格式
- OceanBase 儲存層程式碼解讀(三)巨集塊儲存格式
- Greenplum 效能優化之路 --(二)儲存格式優化
- 如何將網頁儲存成mhtml格式網頁HTML
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- [Hive]建表例項與引數解釋——自定義表的儲存格式(textfile、sequencefile、refile)Hive
- 比較 Apache Hadoop 資料儲存格式 - techwellApacheHadoop
- Spark原始碼編譯支援Parquet儲存格式Spark原始碼編譯
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- mysql 行格式選擇_Mysql 行格式MySql
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- vscode使用stylelint儲存自動格式化程式碼VSCode
- Photoshop增加對.ico,.webp,.avif格式的支援,如何讓ps可以開啟和儲存avif,webp,ico格式Web
- OceanBase 原始碼解讀(九):儲存層程式碼解讀之「巨集塊儲存格式」原始碼
- MyISAM與innoDB儲存引擎有何差別儲存引擎
- Win10把預設圖片儲存格式變成“jfif”了,怎麼變回“JPG”格式?Win10
- Bond——大資料時代的資料交換和儲存格式大資料
- 用於初始化Xilinx 儲存 IP核的COE檔案格式
- Redis序列化儲存及日期格式的問題處理EKDIRedis
- python本地儲存瀏覽器收藏夾網站mhtml格式Python瀏覽器網站HTML
- electron-store會將資料儲存為什麼格式
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- 服務端指南 資料儲存篇 | MySQL(02) 儲存引擎的 InnoDB 與 MyISAM 之爭服務端MySql儲存引擎
- MySql資料儲存格式Compact及計算MySql的B+Tree高度MySql
- Eclipse 儲存檔案時自動格式化程式碼的設定Eclipse
- vscode-rustfmt:Rust儲存時自動格式化的Vscode外掛VSCodeRust
- 解決vscode 中儲存後html自動格式化的問題VSCodeHTML
- Python匯入Excel表格資料並以字典dict格式儲存PythonExcel
- hive從入門到放棄(六)——常用檔案儲存格式Hive
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- MySQL的頁與行格式MySql
- (MariaDB/MySQL)MyISAM儲存引擎讀、寫操作的優先順序MySql儲存引擎