mysql存储引擎的区别_Mysql的两种存储引擎以及区别
一、Mysql的兩種存儲(chǔ)引擎
1、MyISAM:
①不支持事務(wù),但是整個(gè)操作是原子性的(事務(wù)具備四種特性:原子性、一致性、隔離性、持久性)
②不支持外鍵,支持表鎖,每次所住的是整張表
MyISAM的表鎖有讀鎖和寫鎖(兩個(gè)鎖都是表級(jí)別):
表共享讀鎖和表獨(dú)占寫鎖。在對(duì)MyISAM表進(jìn)行讀操作時(shí),不會(huì)阻塞其他用戶對(duì)同一張表的讀請(qǐng)求,但是會(huì)阻塞其他用戶對(duì)表的寫請(qǐng)求;對(duì)其進(jìn)行寫操作時(shí)會(huì)阻塞對(duì)同一表讀操作和寫操作
MyISAM存儲(chǔ)引擎的讀鎖和寫鎖是互斥的,讀寫操作是串行的。那么,一個(gè)進(jìn)程請(qǐng)求某個(gè)MyISAM表的讀鎖,同時(shí)另一個(gè)進(jìn)程也請(qǐng)求同一表的寫鎖,MySQL如何處理呢?答案是寫進(jìn)程先獲得鎖。不僅如此,即使讀請(qǐng)求先到鎖等待隊(duì)列,寫請(qǐng)求后到,寫鎖也會(huì)插到讀鎖請(qǐng)求之前!這是因?yàn)镸ySQL認(rèn)為寫請(qǐng)求一般比讀請(qǐng)求要重要。這也正是MyISAM表不太適合于有大量更新操作和查詢操作應(yīng)用的原因,因?yàn)?#xff0c;大量的更新操作會(huì)造成查詢操作很難獲得讀鎖,從而可能永遠(yuǎn)阻塞。這種情況有時(shí)可能會(huì)變得非常糟糕!
③一個(gè)MyISAM表有三個(gè)文件:索引文件,表結(jié)構(gòu)文件,數(shù)據(jù)文件
④存儲(chǔ)表的總行數(shù),執(zhí)行select count(*) from table時(shí)只要簡單的讀出保存好的行數(shù)即可
(myisam存儲(chǔ)引擎的表,count(*)速度快的也僅僅是不帶where條件的count。這個(gè)想想容易理解的,因?yàn)槟銕Я藈here限制條件,原來所以中緩存的表總數(shù)能夠直接返回用嗎?不能用。這個(gè)查詢引擎也是需要根據(jù)where條件去表中掃描數(shù)據(jù),進(jìn)行統(tǒng)計(jì)返回的。)
⑤采用非聚集索引,索引文件的數(shù)據(jù)域存儲(chǔ)指向數(shù)據(jù)文件的指針。輔索引與主索引基本一致,但是輔索引不用保證唯一性。
⑥支持全文索引和空間索引
⑦對(duì)于AUTO_INCREMENT類型的字段,在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
MyISAM的主索引圖:索引文件的每個(gè)數(shù)據(jù)域存儲(chǔ)指向數(shù)據(jù)文件的指針(每個(gè)索引指向了數(shù)據(jù)地址)
MyISAM的輻索引:索引文件的每個(gè)數(shù)據(jù)域存儲(chǔ)指向數(shù)據(jù)文件的指針(每個(gè)索引指向了數(shù)據(jù)地址),輻索引不用保證唯一性
2、Innodb:
①支持事務(wù),支持事務(wù)的四種隔離級(jí)別;是一種具有事務(wù)(commit)、回滾(rollback)和崩潰修復(fù)能力(crash recovery capabilities)的事務(wù)安全(transaction-safe (ACID compliant))型表。
②支持行鎖和外鍵約束,因此可以支持寫并發(fā)
③不存儲(chǔ)總行數(shù);也就是說,執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行。注意的是,當(dāng)count(*)語句包含 where條件時(shí),兩種表的操作是一樣的。
④對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引
⑤DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除
⑥一個(gè)Innodb表存儲(chǔ)在一個(gè)文件內(nèi)(共享表空間,表大小不受操作系統(tǒng)的限制),也可能為多個(gè)(設(shè)置為獨(dú)立表空間,表大小受操作系統(tǒng)限制,大小為2G),受操作系統(tǒng)文件大小的限制
⑦主鍵索引采用聚集索引(索引的數(shù)據(jù)域存儲(chǔ)數(shù)據(jù)文件本身),輔索引的數(shù)據(jù)域存儲(chǔ)主鍵的值;因此從輔索引查找數(shù)據(jù),需要先通過輔索引找到主鍵值,再訪問主鍵索引;最好使用自增主鍵,防止插入數(shù)據(jù)時(shí),為維持B+樹結(jié)構(gòu),文件的大調(diào)整。
Innodb的主索引圖:(索引位置上存儲(chǔ)的直接是數(shù)據(jù)本身)
Innodb的輻索引圖:
總結(jié)大圖:
參考:
https://www.cnblogs.com/wangdake-qq/p/7358322.html
https://blog.csdn.net/qq_35181209/article/details/78030110
總結(jié)
以上是生活随笔為你收集整理的mysql存储引擎的区别_Mysql的两种存储引擎以及区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台积电今年市值蒸发近7000亿元:分析师
- 下一篇: MySQL笔记——多表查询