- MYSQL存儲(chǔ)引擎介紹
MyISAM和InnoDB的區(qū)別
MYISAM是5.5之前默認(rèn)的存儲(chǔ)引擎,支持全文索引,壓縮,空間函數(shù),但是不支持事務(wù)和行級(jí)鎖,最大卻顯示崩潰后無法安全恢復(fù)。
對(duì)比:
1.是否支持行級(jí)鎖:MyISAM只有表級(jí)鎖,InnoDB支持表級(jí)鎖和行級(jí)鎖,默認(rèn)是行級(jí)鎖
2.是否支持事務(wù)和崩潰后的安全恢復(fù):MyISAM強(qiáng)調(diào)性能,每次查詢具有原子性,執(zhí)行速度更快,但是不提供事務(wù)支持,InnoDB支持外鍵和事務(wù)等高級(jí)數(shù)據(jù)庫功能,支持回滾,崩潰后的修復(fù),和事務(wù)
3.是否支持外鍵:MyISAM就不支持,InnoDB支持
4.是否支持MVCC:僅InnoDB支持,MVCC用于高并發(fā)事務(wù),比加鎖更加高效,MVCC只在READ COMMITTED 和 REEPEATABLE READ兩個(gè)隔離級(jí)別下工作,內(nèi)部使用樂觀鎖和悲觀鎖來實(shí)現(xiàn)
https://www.cnblogs.com/songwp/p/14338422.html
(在InnoDB使用聚簇索引或者訪問數(shù)據(jù)放入內(nèi)存的應(yīng)用中,執(zhí)行效率比MyISAM更快)
————————————————
版權(quán)聲明:本文為CSDN博主「蓋世英雄來了」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_40513633/article/details/111146180
- 索引
mysql索引使用的數(shù)據(jù)結(jié)構(gòu)主要有BTree索引和哈希索引,哈希索引底層數(shù)據(jù)結(jié)構(gòu)是哈希表,對(duì)于單條記錄查詢的時(shí)候可以選擇哈希索引,查詢性能最快,其余場(chǎng)景,更適合使用B-Tree索引
mysq中使用的是B+Tree索引,但是對(duì)于MyISAM和InnoDB實(shí)現(xiàn)的方式不同

為什么要使用B+樹呢?
首先我們知道在數(shù)據(jù)庫中索引可以使用hash算法,查詢效率很高,但是不支持范圍查詢,因此我們考慮使用平衡二叉樹,但是我們知道二叉樹每個(gè)節(jié)點(diǎn)只有一個(gè)數(shù)據(jù),如果數(shù)據(jù)變多的話,樹就會(huì)越來越高,查詢的成本也會(huì)增高,我們考慮使用B樹,它可以在一個(gè)節(jié)點(diǎn)存儲(chǔ)多個(gè)數(shù)據(jù),B+樹的優(yōu)化是非葉子節(jié)點(diǎn)的數(shù)據(jù)會(huì)冗余一份在葉子節(jié)點(diǎn),并且葉子節(jié)點(diǎn)之間使用指針相連,因此增高查詢效率,而且支持范圍查詢,B+樹里的元素也是有序的
————————————————
版權(quán)聲明:本文為CSDN博主「蓋世英雄來了」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_40513633/article/details/111146180
https://www.cnblogs.com/songwp/p/14338422.html
https://www.51cto.com/article/685312.html
- InnoDB 索引實(shí)現(xiàn)——聚集
表數(shù)據(jù)文件本身就是按 B+Tree 組織的一個(gè)索引結(jié)構(gòu)文件
聚集索引-葉子節(jié)點(diǎn)包含了完整的數(shù)據(jù)記錄
為什么 InnoDb 表必須有主鍵,并且推薦使用整型的自增主鍵?
如果沒有設(shè)置索引的話,MySQL 會(huì)選擇一個(gè)數(shù)據(jù)唯一的列作為主鍵索引, 如果找不這樣的列。會(huì)去做創(chuàng)建一個(gè)隱藏列類似 rowid。
表數(shù)據(jù)文件按照 B+Tree 的數(shù)據(jù)結(jié)構(gòu)維護(hù),在葉子節(jié)點(diǎn)維護(hù)的是該行的數(shù)據(jù)。所以必須有主鍵。
整型更方便 B+Tree 排序,自增的話,對(duì)于數(shù)據(jù)結(jié)構(gòu)的存放更快, 順序存放,不需要進(jìn)行大量樹的平衡操作。
為什么非主鍵索引結(jié)構(gòu)葉子節(jié)點(diǎn)的存儲(chǔ)的是主鍵值?
一致性, 讓主鍵索引先成功,然后再去更新非主鍵索引關(guān)系
節(jié)省存儲(chǔ)空間。
主鍵索引示意圖:

image.png
非主鍵索引示意圖:

image.png
兩個(gè)數(shù)據(jù)文件:
.frm 主要是存儲(chǔ)表結(jié)構(gòu)信息
.ibd 主要是存儲(chǔ)索引和數(shù)據(jù)
- MyISAM 索引文件——非聚集
索引文件和數(shù)據(jù)文件是分離的(非聚集)

image.png
三個(gè)數(shù)據(jù)文件:
.frm 數(shù)據(jù)結(jié)構(gòu)文件
.myd 文件主要是存儲(chǔ)數(shù)據(jù)
.myi 文件主要是存儲(chǔ)索引信息
- mysql 執(zhí)行過程
連接器:建立連接、驗(yàn)證賬號(hào)密碼、檢查權(quán)限
緩存(8.0失效)
分析器:詞和語法的檢查
優(yōu)化器:選擇最佳索引、生產(chǎn)執(zhí)行計(jì)劃
執(zhí)行器: 通過API ,調(diào)用引起

https://www.cnblogs.com/wyq178/p/11576065.html
https://blog.csdn.net/xhaimail/article/details/135287338
- mysql 語句解析過程
from
join on
where
group by
having
select
distinct
order by
limit

https://www.cnblogs.com/williamjie/p/11081592.html
- mysql explain詳解
在 select 語句之前增加 explain 關(guān)鍵字,MySQL 會(huì)在查詢上設(shè)置一個(gè)標(biāo)記,執(zhí)行查詢時(shí),會(huì)返回執(zhí)行計(jì)劃的信息,而不是執(zhí)行這條SQL(如果 from 中包含子查詢,仍會(huì)執(zhí)行該子查詢,將結(jié)果放入臨時(shí)表中)
https://cloud.tencent.com/developer/article/1093229