總結(jié)一下MySQL的Myisam和Innodb引擎的一些差別,權(quán)當復(fù)習(xí)了。
首先二者在 文件構(gòu)成 上:
?
- Myisam會存儲三個文件:.frm 存儲表結(jié)構(gòu),.MYD存儲表的數(shù)據(jù),.MYI文件存儲表的索引;所以完整的拷貝一張表這三個文件都需要。另外Myisam會對索引進行壓縮。用Myisam備份會更簡單。
- Innodb也有 .frm表結(jié)構(gòu)文件,但是數(shù)據(jù)存儲就不同了,由于有表空間的概念,所以數(shù)據(jù)文件可能是獨立的,也可能是空閑的,獨立的話數(shù)據(jù)和索引都會在一個.ibd文件內(nèi)。
對
事務(wù)
的支持:
- Myisam不支持;所以如果你真的需要諸如事務(wù),外鍵等特性,放棄它吧。
- Innodb支持 事物,回滾等一些事務(wù)安全的ACID特性,支持外鍵。
鎖
:
- Myisam只支持表鎖,意即如果你執(zhí)行了一條DML(數(shù)據(jù)操縱語言,即增刪改查)語句,整張表會獲得一把鎖,在操作執(zhí)行完之前其他人不能夠再操作這張表了,所以如果表的并發(fā)高,Myisam性能會差一些
- Myisam支持行鎖,即可以只給某一行上鎖而非整個表,所以在并發(fā)情況下,Update之類的操作性能會更好。當然如果一條SQL語句不能確定掃描范圍時,也會鎖表,諸如where like'%'的操作。更簡單來說,Innodb使用where檢索的列沒有索引,那么就會鎖表了。
DML
(Insert, Select, Update, Delete):
- Select:一般認為Myisam的讀性能會比Innodb更好,所以如果是個讀多寫少的項目,這點上Myisam可以有加分。
- Insert:這個要分情況來說,單線程操作,Myisam明顯會快,但是并發(fā)多的話就不一定了。還有需要說明的是Myisam支持Insert Delayed操作,如果你的應(yīng)用可以接受這種使用方式(可能延遲一下才生效),那么它會更好一些
- Update:一般認為Innodb更快
- Delete:Innodb,它會一行行的刪除表,而不是重新建立表
其他:
- count(*) ?:Myisam會保存表的具體行數(shù),而innodb不會,所以你在用phpmyadmin來查看時,表的行數(shù)會顯示'~'大約多少行。所以select count(*) 用Myisam當然快,不過這是不加where條件的情況下
- Myisam還支持全文索引,比如說搜索諸如某些text字段時 where * like "%*"時性能和效率會更好
-
Auto_Increment:Innodb必須包含只有該字段的索引,而Myisam可以使用聯(lián)合索引。
- Myisam建立的表可以使用Myisam_merge引擎,在某些情況下很有用。
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
