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ù)類(lèi)型的列也可以被索引;- 在索引列中允許使用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ù)使用的列類(lèi)型自動(dòng)選擇, - 第三種是
壓縮格式,只能使用myisampack實(shí)用程序生成并且是只讀格式 - 當(dāng)表中沒(méi)有
BLOB或TEXT數(shù)據(jù)類(lèi)型的列,在使用 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類(lèi)型的列用空格填充到指定的列寬;BINARY和VARBINARY類(lèi)型的列用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):
- 列類(lèi)型是字符串,且長(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的列,如果字符串類(lèi)型的列長(zhǎng)度為零,或者數(shù)字列的值0,則在位圖中標(biāo)記并且不會(huì)保存到磁盤(pán); - 通常磁盤(pán)空間占用比固定長(zhǎng)度表要少很多;。
- 每行都單獨(dú)壓縮,每列都可能用單獨(dú)的方式進(jìn)行壓縮。
常用的壓縮方式:
- 如果數(shù)值列的值為0,無(wú)論原始數(shù)據(jù)類(lèi)型是哪種都用一個(gè)
BIT類(lèi)型存儲(chǔ)。 - 如果整數(shù)列中的值范圍較小,則盡可能使小的類(lèi)型存儲(chǔ)該列,比如:列中的值范圍在 -128 到 127 之間,即使原始類(lèi)型為
bigint(8bytes),也使用TINYINT(1 byte) 類(lèi)型存儲(chǔ) - 如果列中只有一小組可能出現(xiàn)的值,則數(shù)據(jù)類(lèi)型轉(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的Join語(yǔ)法前還是先回顧一下聯(lián)結(jié)的語(yǔ)法,呵呵,其實(shí)連我自己都忘得差不多了,那就大家一起溫習(xí)吧,這里我有個(gè)比較簡(jiǎn)便的記憶方法,內(nèi)外聯(lián)結(jié)的區(qū)別是內(nèi)聯(lián)結(jié)將去除所有不符合條件的記錄,而外聯(lián)結(jié)則保留其中部分。外左聯(lián)結(jié)與外右聯(lián)結(jié)的區(qū)別在于如果用A左聯(lián)結(jié)B則A中所有記錄都會(huì)保留在結(jié)果中,此時(shí)B中只有符合聯(lián)結(jié)條件的記錄,而右聯(lián)結(jié)相反,這樣也就不會(huì)混淆了。2014-05-05
clickhouse復(fù)雜時(shí)間格式的轉(zhuǎn)換方式
這篇文章主要介紹了clickhouse復(fù)雜時(shí)間格式的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Mysql 8 新特性 window functions 的作用
MySQL是眾多網(wǎng)站技術(shù)棧中的標(biāo)準(zhǔn)配置,是廣受歡迎的開(kāi)源數(shù)據(jù)庫(kù),已經(jīng)推出了8.0的第一個(gè)候選發(fā)行版本。接下來(lái)通過(guò)本文給大家分享Mysql 8 新特性 window functions 的作用,需要的朋友參考下吧2017-11-11
mysql實(shí)現(xiàn)查詢數(shù)據(jù)并根據(jù)條件更新到另一張表的方法示例
這篇文章主要介紹了mysql實(shí)現(xiàn)查詢數(shù)據(jù)并根據(jù)條件更新到另一張表的方法,結(jié)合實(shí)例形式分析了mysql多表關(guān)聯(lián)查詢、更新等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
詳細(xì)解讀分布式鎖原理及三種實(shí)現(xiàn)方式
這篇文章從三種基于不同形式的分布式鎖的實(shí)現(xiàn),數(shù)據(jù)庫(kù)、緩存和zookeeper,內(nèi)容比較詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
Mysql數(shù)據(jù)庫(kù)介紹及mysql顯示命令
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)介紹及mysql顯示命令 的相關(guān)資料,需要的朋友可以參考下2016-04-04
Navicat導(dǎo)出MySQL數(shù)據(jù)庫(kù)表結(jié)構(gòu)到Excel過(guò)程
本文介紹了如何將數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)導(dǎo)出到Excel文件中,包括使用SQL語(yǔ)句查詢表結(jié)構(gòu)并使用Navicat工具導(dǎo)出到Excel文件的步驟,總結(jié):將數(shù)據(jù)庫(kù)表結(jié)構(gòu)導(dǎo)出到Excel文件中,便于后續(xù)使用或存檔2026-01-01
MySQL實(shí)現(xiàn)JDBC詳細(xì)步驟
JDBC?是?Java?訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)規(guī)范,真正怎么操作數(shù)據(jù)庫(kù)還需要具體的實(shí)現(xiàn)類(lèi),也就是數(shù)據(jù)庫(kù)驅(qū)動(dòng),本文給大家介紹MySQL實(shí)現(xiàn)JDBC詳細(xì)講解,感興趣的朋友一起看看吧2022-02-02
MySQL中g(shù)roup by與max()一起使用的坑
最近在做一個(gè)項(xiàng)目,發(fā)現(xiàn)用之前SQL語(yǔ)句導(dǎo)出的余額與客戶人員最近消費(fèi)記錄所顯示的余額不一致,本文就來(lái)了解一下這個(gè)錯(cuò)誤,感興趣的可以了解一下2023-08-08

