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來移除。
相關文章
- Myisam 靜態格式資料儲存結構
- Myisam-儲存引擎-動態格式-DELETED ROWS儲存引擎delete
- Myisam-儲存引擎-靜態格式-DELETED ROWS儲存引擎delete
- Mysql 行的儲存格式MySql
- Hbase儲存格式
- Hive之儲存格式Hive
- Redis儲存結構以及儲存格式Redis
- oracle的儲存過程格式Oracle儲存過程
- Nebula Storage 2.0 儲存格式
- hive檔案儲存格式Hive
- HBase的儲存格式是什麼?
- SQL Server的datetime儲存格式SQLServer
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- oracle儲存過程書寫格式Oracle儲存過程
- redis-5.資料儲存格式Redis
- T-SQL 儲存過程建立 PDF 格式檔案(報表)SQL儲存過程
- 如何將網頁儲存成mhtml格式網頁HTML
- Greenplum 效能優化之路 --(二)儲存格式優化
- OceanBase 儲存層程式碼解讀(三)巨集塊儲存格式
- OceanBase 儲存層程式碼解讀(二)微塊儲存格式
- Spark原始碼編譯支援Parquet儲存格式Spark原始碼編譯
- 【MySQL】時間型別儲存格式選擇MySql型別
- [Hive]建表例項與引數解釋——自定義表的儲存格式(textfile、sequencefile、refile)Hive
- oracle中的數值資料儲存格式分析(ZT)Oracle
- mysql 行格式選擇_Mysql 行格式MySql
- 比較 Apache Hadoop 資料儲存格式 - techwellApacheHadoop
- 儲存系統實現-資料檔案格式
- 【Mysql 學習】MyISAM儲存引擎(二)。MySql儲存引擎
- 【Mysql 學習】MyISAM儲存引擎(一)。MySql儲存引擎
- java儲存時間date到mysql的datetime格式的方法JavaMySql
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- Oracle基本資料型別儲存格式淺析[zt]Oracle資料型別
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- Myisam 儲存引擎-MYI索引檔案-1儲存引擎索引
- Win10把預設圖片儲存格式變成“jfif”了,怎麼變回“JPG”格式?Win10
- electron-store會將資料儲存為什麼格式
- Redis序列化儲存及日期格式的問題處理EKDIRedis