MySQL 存儲(chǔ)引擎 MyISAM詳解(最新推薦)
MySQL 5.5 之前默認(rèn)的存儲(chǔ)引擎
使用 MyISAM
存儲(chǔ)引擎的表占用空間很小,但是由于使用表級(jí)鎖定,所以限制了讀/寫(xiě)操作的性能,通常用于中小型的Web應(yīng)用和數(shù)據(jù)倉(cāng)庫(kù)配置中的只讀或主要是讀的場(chǎng)景。
?????一、MyISAM 存儲(chǔ)引擎的特性
MyISAM
和 InnoDB
的主要區(qū)別
- 外鍵
- 事務(wù)
- Hash 索引
- 鎖粒度
?????二、MyISAM 的主要優(yōu)勢(shì)
- MyISAM 表的最大行數(shù)為(232)^2及(1.844E+19)行;
- 每個(gè)MyISAM表最多可以創(chuàng)建64個(gè)索引,每個(gè)索引最多可以包含16個(gè)列;
- 支持并發(fā)插入;
- 通過(guò)
CREATE table
創(chuàng)建表時(shí),指定DATA DIRECTORY=PATH
和INDEXDIRECTORY=PATH
將數(shù)據(jù)文件和索引文件放在不同設(shè)備的不同目錄中,從而提高訪問(wèn)速度: BLOB
和TEXT
數(shù)據(jù)類型的列也可以被索引;- 在索引列中允許使用NULL值;
- 如果
mysqld
啟動(dòng)時(shí)設(shè)置了myisam_recover_options
系統(tǒng)變量,那么 MyISAM 表在打開(kāi)時(shí)進(jìn)行會(huì)自查,如果上一次表沒(méi)有正確關(guān)閉將會(huì)修復(fù); - 表中
VARCHAR
和CHAR
列的長(zhǎng)度總和最多可達(dá)64KB。 UNIOUE
約束的長(zhǎng)度不受限制
?????
在MySOL8.0中 InnoDB 是默認(rèn)引擎,所以在創(chuàng)建表時(shí)需要指定 ENGINE=MyISAM
創(chuàng)建
MyISAM
表會(huì)根據(jù)表名生成三個(gè)不同后綴名文件,分別是以.MYD
(MYData)為后綴的數(shù)據(jù)文件,以.MYI
(MYIndex)為后綴的索引文件,以.sdi
為后綴的表信息描述文件(JSON格式)
在8.0以前的版本中表信息描述文件是以.frm
為后綴的二進(jìn)制文件
?????四、MyISAM 表存儲(chǔ)格式
- MyISAM 表支持三種不同的存儲(chǔ)格式,
- 其中
FIXED
靜態(tài)(固定)格式和DYNAMIC
動(dòng)態(tài)格式,根據(jù)使用的列類型自動(dòng)選擇, - 第三種是
壓縮格式
,只能使用myisampack
實(shí)用程序生成并且是只讀格式 - 當(dāng)表中沒(méi)有
BLOB
或TEXT
數(shù)據(jù)類型的列,在使用 CREATE TABLE或 ALTER TABLE 語(yǔ)句創(chuàng)建或修改表時(shí),可以結(jié)合 ROW_FORMAT表選項(xiàng)將表格式設(shè)置為FIXED或DYNAMIC。 - 使用 myisamchk 實(shí)用工具對(duì)已壓縮的MyISAM進(jìn)行解壓操作,myisamchk --unpack。
4.1 靜態(tài)格式(Fixed-Length)表
- 靜態(tài)格式是
MyISAM
表的默認(rèn)格式,當(dāng)表不包含可變長(zhǎng)度的列(VARCHAR
、VARBINARY
、BLOB
或TEXT
)時(shí)使用,每行都使用固定數(shù)量的字節(jié)存儲(chǔ)。 - MyISAM 的三種存儲(chǔ)格式中,靜態(tài)格式是最簡(jiǎn)單和最安全的(最不容易損壞),同時(shí)也是最快的磁盤(pán)格式,因?yàn)槊啃械拈L(zhǎng)度固定,根據(jù)索引中的行號(hào)乘以行長(zhǎng)度就可以計(jì)算出行位置,此外,讀取固定數(shù)量的行也非常的高效。
- 靜態(tài)格式表具有以下特點(diǎn):
CHAR
和VARCHAR
類型的列用空格填充到指定的列寬;BINARY
和VARBINARY
類型的列用0x00
字節(jié)填充到列寬每個(gè)允許為NULL的列,都用一個(gè)1 BIT
的額外空間記錄當(dāng)前列是否為空;。- 速度非??欤乙子诰彺?。
- 崩潰后易于重建,因?yàn)樾卸嘉挥诠潭ㄎ恢?,?/li>
- 通常需要比動(dòng)態(tài)格式表更多的磁盤(pán)空間;。
4.2 動(dòng)態(tài)格式表
當(dāng)表中包含可變長(zhǎng)度列(VARCHAR
、VARBINARY
、BLOB
或 TEXT
)或者在創(chuàng)建表時(shí)使用 ROW_FORMAT=DYNAMIC
選項(xiàng),則表格式為動(dòng)態(tài)存儲(chǔ)格式
動(dòng)態(tài)格式表具有以下特點(diǎn):
- 列類型是字符串,且長(zhǎng)度大于等于4,長(zhǎng)度都是動(dòng)態(tài)的:
- 每一行都有一個(gè)標(biāo)志來(lái)指示行有多長(zhǎng),當(dāng)因更新操作而變得更長(zhǎng)時(shí),數(shù)據(jù)可能存儲(chǔ)在不連續(xù)的空間,可以使用
OPTIMIZE TABLE table_name
語(yǔ)句或myisamchk -r
對(duì)表進(jìn)行碎片整理; - 每個(gè)允許為NULL的列,都用一個(gè)
1 BIT
的額外空間記錄當(dāng)前列是否為空; - 每行前面都有一個(gè)
bitmap
(位圖),用來(lái)記錄包含空字符串或0的列,如果字符串類型的列長(zhǎng)度為零,或者數(shù)字列的值0,則在位圖中標(biāo)記并且不會(huì)保存到磁盤(pán); - 通常磁盤(pán)空間占用比固定長(zhǎng)度表要少很多;。
- 每行都單獨(dú)壓縮,每列都可能用單獨(dú)的方式進(jìn)行壓縮。
常用的壓縮方式:
- 如果數(shù)值列的值為0,無(wú)論原始數(shù)據(jù)類型是哪種都用一個(gè)
BIT
類型存儲(chǔ)。 - 如果整數(shù)列中的值范圍較小,則盡可能使小的類型存儲(chǔ)該列,比如:列中的值范圍在 -128 到 127 之間,即使原始類型為
bigint
(8bytes),也使用TINYINT
(1 byte) 類型存儲(chǔ) - 如果列中只有一小組可能出現(xiàn)的值,則數(shù)據(jù)類型轉(zhuǎn)換為
ENUM
;
4.3 壓縮存儲(chǔ)格式
- 壓縮存儲(chǔ)格式是使用
myisampack
工具生成的只讀格式數(shù)據(jù)表,壓縮表可以用myisamchk
解壓縮。 - 壓縮格式表具有以下特點(diǎn):
- 壓縮表占用很少的磁盤(pán)空間,最大限度地減少了磁盤(pán)使用:
- 可以用于固定長(zhǎng)度或動(dòng)態(tài)長(zhǎng)度
- 行壓縮表是只讀的,因此不能在表中更新或添加數(shù)據(jù):
??總結(jié)
本篇博文對(duì) 【MySQL】存儲(chǔ)引擎 - MyISAM詳解 做了一個(gè)較為詳細(xì)的介紹,不知道對(duì)你有沒(méi)有幫助呢
到此這篇關(guān)于MySQL 存儲(chǔ)引擎 MyISAM詳解(最新推薦)的文章就介紹到這了,更多相關(guān)MySQL 存儲(chǔ)引擎 MyISAM內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL存儲(chǔ)引擎MyISAM與InnoDB區(qū)別總結(jié)整理
- Mysql更換MyISAM存儲(chǔ)引擎為Innodb的操作記錄總結(jié)
- Mysql存儲(chǔ)引擎MyISAM的常見(jiàn)問(wèn)題(表?yè)p壞、無(wú)法訪問(wèn)、磁盤(pán)空間不足)
- MySQL存儲(chǔ)引擎中的MyISAM和InnoDB區(qū)別詳解
- MySQL存儲(chǔ)引擎MyISAM與InnoDB的9點(diǎn)區(qū)別
- MySQL數(shù)據(jù)庫(kù)MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法
- MySQL存儲(chǔ)引擎 InnoDB與MyISAM的區(qū)別
- 淺談MySQL存儲(chǔ)引擎選擇 InnoDB與MyISAM的優(yōu)缺點(diǎn)分析
相關(guān)文章
mysql存儲(chǔ)過(guò)程游標(biāo)之loop循環(huán)解讀
這篇文章主要介紹了mysql存儲(chǔ)過(guò)程游標(biāo)之loop循環(huán)解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07mysql 5.7.17 zip安裝配置教程 mysql啟動(dòng)失敗的解決方法
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 zip安裝配置教程,以及mysql啟動(dòng)失敗的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06mysql binlog日志自動(dòng)清理及手動(dòng)刪除
本文主要介紹了mysql binlog日志自動(dòng)清理及手動(dòng)刪除,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)注意事項(xiàng)記錄(遠(yuǎn)程連接慢skip-name-resolve)
有時(shí)候我們需要遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù),就需要注意下面的問(wèn)題,方便大家解決,腳本之家小編特為大家準(zhǔn)備了一些資料2012-07-07MySql獲取當(dāng)前時(shí)間并轉(zhuǎn)換成字符串的實(shí)現(xiàn)
本文主要介紹了MySql獲取當(dāng)前時(shí)間并轉(zhuǎn)換成字符串的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07mysql 數(shù)據(jù)庫(kù)鏈接狀態(tài)確認(rèn)實(shí)驗(yàn)(推薦)
這篇文章主要介紹了mysql 數(shù)據(jù)庫(kù)鏈接狀態(tài)確認(rèn)實(shí)驗(yàn),通過(guò)本文我選擇 了三種方案給大家詳細(xì)講解,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09mysql 登錄報(bào)錯(cuò):ERROR 1045 (28000):Access den
本文主要介紹了mysql 登錄報(bào)錯(cuò):ERROR 1045 (28000):Access denied for user ‘root‘@‘localhost‘ (using password: Yes)的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03