MySQL 存儲引擎 MyISAM詳解(最新推薦)
MySQL 5.5 之前默認的存儲引擎
使用 MyISAM 存儲引擎的表占用空間很小,但是由于使用表級鎖定,所以限制了讀/寫操作的性能,通常用于中小型的Web應用和數據倉庫配置中的只讀或主要是讀的場景。
?????一、MyISAM 存儲引擎的特性

MyISAM 和 InnoDB 的主要區(qū)別
- 外鍵
- 事務
- Hash 索引
- 鎖粒度

?????二、MyISAM 的主要優(yōu)勢
- MyISAM 表的最大行數為(232)^2及(1.844E+19)行;
- 每個MyISAM表最多可以創(chuàng)建64個索引,每個索引最多可以包含16個列;
- 支持并發(fā)插入;
- 通過
CREATE table創(chuàng)建表時,指定DATA DIRECTORY=PATH和INDEXDIRECTORY=PATH將數據文件和索引文件放在不同設備的不同目錄中,從而提高訪問速度: BLOB和TEXT數據類型的列也可以被索引;- 在索引列中允許使用NULL值;
- 如果
mysqld啟動時設置了myisam_recover_options系統(tǒng)變量,那么 MyISAM 表在打開時進行會自查,如果上一次表沒有正確關閉將會修復; - 表中
VARCHAR和CHAR列的長度總和最多可達64KB。 UNIOUE約束的長度不受限制
?????
在MySOL8.0中 InnoDB 是默認引擎,所以在創(chuàng)建表時需要指定 ENGINE=MyISAM

創(chuàng)建
MyISAM表會根據表名生成三個不同后綴名文件,分別是以.MYD(MYData)為后綴的數據文件,以.MYI(MYIndex)為后綴的索引文件,以.sdi為后綴的表信息描述文件(JSON格式)
在8.0以前的版本中表信息描述文件是以.frm為后綴的二進制文件

?????四、MyISAM 表存儲格式
- MyISAM 表支持三種不同的存儲格式,
- 其中
FIXED靜態(tài)(固定)格式和DYNAMIC動態(tài)格式,根據使用的列類型自動選擇, - 第三種是
壓縮格式,只能使用myisampack實用程序生成并且是只讀格式 - 當表中沒有
BLOB或TEXT數據類型的列,在使用 CREATE TABLE或 ALTER TABLE 語句創(chuàng)建或修改表時,可以結合 ROW_FORMAT表選項將表格式設置為FIXED或DYNAMIC。 - 使用 myisamchk 實用工具對已壓縮的MyISAM進行解壓操作,myisamchk --unpack。
4.1 靜態(tài)格式(Fixed-Length)表
- 靜態(tài)格式是
MyISAM表的默認格式,當表不包含可變長度的列(VARCHAR、VARBINARY、BLOB或TEXT)時使用,每行都使用固定數量的字節(jié)存儲。 - MyISAM 的三種存儲格式中,靜態(tài)格式是最簡單和最安全的(最不容易損壞),同時也是最快的磁盤格式,因為每行的長度固定,根據索引中的行號乘以行長度就可以計算出行位置,此外,讀取固定數量的行也非常的高效。
- 靜態(tài)格式表具有以下特點:
CHAR和VARCHAR類型的列用空格填充到指定的列寬;BINARY和VARBINARY類型的列用0x00字節(jié)填充到列寬每個允許為NULL的列,都用一個1 BIT的額外空間記錄當前列是否為空;。- 速度非??欤乙子诰彺?。
- 崩潰后易于重建,因為行都位于固定位置,。
- 通常需要比動態(tài)格式表更多的磁盤空間;。
4.2 動態(tài)格式表
當表中包含可變長度列(VARCHAR、VARBINARY、BLOB 或 TEXT )或者在創(chuàng)建表時使用 ROW_FORMAT=DYNAMIC選項,則表格式為動態(tài)存儲格式
動態(tài)格式表具有以下特點:
- 列類型是字符串,且長度大于等于4,長度都是動態(tài)的:
- 每一行都有一個標志來指示行有多長,當因更新操作而變得更長時,數據可能存儲在不連續(xù)的空間,可以使用
OPTIMIZE TABLE table_name語句或myisamchk -r對表進行碎片整理; - 每個允許為NULL的列,都用一個
1 BIT的額外空間記錄當前列是否為空; - 每行前面都有一個
bitmap(位圖),用來記錄包含空字符串或0的列,如果字符串類型的列長度為零,或者數字列的值0,則在位圖中標記并且不會保存到磁盤; - 通常磁盤空間占用比固定長度表要少很多;。
- 每行都單獨壓縮,每列都可能用單獨的方式進行壓縮。
常用的壓縮方式:
- 如果數值列的值為0,無論原始數據類型是哪種都用一個
BIT類型存儲。 - 如果整數列中的值范圍較小,則盡可能使小的類型存儲該列,比如:列中的值范圍在 -128 到 127 之間,即使原始類型為
bigint(8bytes),也使用TINYINT(1 byte) 類型存儲 - 如果列中只有一小組可能出現的值,則數據類型轉換為
ENUM;
4.3 壓縮存儲格式
- 壓縮存儲格式是使用
myisampack工具生成的只讀格式數據表,壓縮表可以用myisamchk解壓縮。 - 壓縮格式表具有以下特點:
- 壓縮表占用很少的磁盤空間,最大限度地減少了磁盤使用:
- 可以用于固定長度或動態(tài)長度
- 行壓縮表是只讀的,因此不能在表中更新或添加數據:
??總結
本篇博文對 【MySQL】存儲引擎 - MyISAM詳解 做了一個較為詳細的介紹,不知道對你有沒有幫助呢
到此這篇關于MySQL 存儲引擎 MyISAM詳解(最新推薦)的文章就介紹到這了,更多相關MySQL 存儲引擎 MyISAM內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Mysql 8 新特性 window functions 的作用
MySQL是眾多網站技術棧中的標準配置,是廣受歡迎的開源數據庫,已經推出了8.0的第一個候選發(fā)行版本。接下來通過本文給大家分享Mysql 8 新特性 window functions 的作用,需要的朋友參考下吧2017-11-11

