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

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