站長資訊網
最全最豐富的資訊網站

mysql中MyISAM和InnoDB的區別是什么

區別:1、InnoDB支持事務,MyISAM不支持;2、InnoDB支持外鍵,而MyISAM不支持;3、InnoDB是聚集索引,而MyISAM是非聚集索引;4、Innodb不支持全文索引,而MyISAM支持全文索引;5、InnoDB支持表、行級鎖,而MyISAM支持表級鎖;6、InnoDB表必須有唯一索引,而Myisam可以沒有;7、存儲文件不同。

mysql中MyISAM和InnoDB的區別是什么

程序員必備接口測試調試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設計、調試、文檔、自動化測試工具
后端、前端、測試,同時在線協作,內容實時同步

本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。

InnoDB:MySQL默認的事務型引擎,也是最重要和使用最廣泛的存儲引擎。它被設計成為大量的短期事務,短期事務大部分情況下是正常提交的,很少被回滾。InnoDB的性能與自動崩潰恢復的特性,使得它在非事務存儲需求中也很流行。除非有非常特別的原因需要使用其他的存儲引擎,否則應該優先考慮InnoDB引擎。

MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默認引擎。MyISAM提供的大量的特性,包括全文索引、壓縮、空間函數(GIS)等,但MyISAM并不支持事務以及行級鎖,而且一個毫無疑問的缺陷是崩潰后無法安全恢復。

mysql中MyISAM和InnoDB的區別:

1. InnoDB支持事務,MyISAM不支持,對于InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;

2. InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB表轉為MYISAM會失敗;

3. InnoDB是聚集索引,使用B+Tree作為索引結構,數據文件是和(主鍵)索引綁在一起的(表數據文件本身就是按B+Tree組織的一個索引結構),必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數據。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。

MyISAM是非聚集索引,也是使用B+Tree作為索引結構,索引和數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。

也就是說:InnoDB的B+樹主鍵索引的葉子節點就是數據文件,輔助索引的葉子節點是主鍵的值;而MyISAM的B+樹主鍵索引和輔助索引的葉子節點都是數據文件的地址指針。

mysql中MyISAM和InnoDB的區別是什么

mysql中MyISAM和InnoDB的區別是什么

4. InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快(注意不能加有任何WHERE條件);

那么為什么InnoDB沒有了這個變量呢?

因為InnoDB的事務特性,在同一時刻表中的行數對于不同的事務而言是不一樣的,因此count統計會計算對于當前事務而言可以統計到的行數,而不是將總行數儲存起來方便快速查詢。InnoDB會嘗試遍歷一個盡可能小的索引除非優化器提示使用別的索引。如果二級索引不存在,InnoDB還會嘗試去遍歷其他聚簇索引。
如果索引并沒有完全處于InnoDB維護的緩沖區(Buffer Pool)中,count操作會比較費時。可以建立一個記錄總行數的表并讓你的程序在INSERT/DELETE時更新對應的數據。和上面提到的問題一樣,如果此時存在多個事務的話這種方案也不太好用。如果得到大致的行數值已經足夠滿足需求可以嘗試SHOW TABLE STATUS

5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引領域的查詢效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

6. MyISAM表格可以被壓縮后進行查詢操作

7. InnoDB支持表、行(默認)級鎖,而MyISAM支持表級鎖

InnoDB的行鎖是實現在索引上的,而不是鎖在物理行記錄上。潛臺詞是,如果訪問沒有命中索引,也無法使用行鎖,將要退化為表鎖。

例如:

t_user(uid, uname, age, sex) innodb;       uid PK     無其他索引     update t_user set age=10 where uid=1;             命中索引,行鎖。       update t_user set age=10 where uid != 1;           未命中索引,表鎖。       update t_user set age=10 where name='chackca';    無索引,表鎖。
登錄后復制

8、InnoDB表必須有唯一索引(如主鍵)(用戶沒有指定的話會自己找/生產一個隱藏列Row_id來充當默認主鍵),而Myisam可以沒有

9、Innodb存儲文件有frm、ibd,而Myisam是frm、MYD、MYI

Innodb:frm是表定義文件,ibd是數據文件

Myisam:frm是表定義文件,myd是數據文件,myi是索引文件

如何選擇:

1. 是否要支持事務,如果要請選擇innodb,如果不需要可以考慮MyISAM;

2. 如果表中絕大多數都只是讀查詢,可以考慮MyISAM,如果既有讀也有寫,請使用InnoDB。

3. 系統奔潰后,MyISAM恢復起來更困難,能否接受;

4. MySQL5.5版本開始Innodb已經成為Mysql的默認引擎(之前是MyISAM),說明其優勢是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會差。

InnoDB為什么推薦使用自增ID作為主鍵?

答:自增ID可以保證每次插入時B+索引是從右邊擴展的,可以避免B+樹和頻繁合并和分裂(對比使用UUID)。如果使用字符串主鍵和隨機主鍵,會使得數據隨機插入,效率比較差。

innodb引擎的4大特性

插入緩沖(insert buffer),二次寫(double write),自適應哈希索引(ahi),預讀(read ahead)

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
91麻豆精品国产自产在线| 99久久国产宗和精品1上映| 久久久久久久久无码精品亚洲日韩 | 国产精品99久久久久久宅男| 日韩亚洲国产综合久久久| 成人国产激情福利久久精品| 十八禁无遮挡99精品国产| 国产成人精品久久免费动漫| 精品无码日韩一区二区三区不卡| 亚洲av永久无码精品网站| 精品视频一区二区三区免费| 国产在线观看一区精品| 国产精品无码无卡无需播放器| 日韩精品无码免费视频| 日韩午夜伦y4480私人影院| 亚洲日韩图片专区第1页| 国产91精品新入口| 国产精品美女久久久久av超清| 久久精品免费一区二区喷潮| 精品久久久久久无码不卡| 国产精品久久久久久久久免费| 精品无码成人片一区二区98| 亚洲国产精品综合久久网各| 久久99久久99精品免视看动漫| 人妻少妇精品无码专区二区| 久久久久久久99精品免费| 久久久久人妻精品一区蜜桃| 亚洲国产精品一区二区第一页| 国产精品免费观看调教网| 久久99精品国产99久久| 亚洲国产精品一区第二页| 亚洲国产精品va在线播放| 国产成人精品手机在线观看| 久久国产精品国产精品| 久久精品影院永久网址| 亚洲国产精品热久久| 99久热re在线精品996热视频| 精品无码人妻一区二区三区品| 亚洲精品在线免费观看| 91探花国产综合在线精品| 国产精品美女久久久久网|