您現在的位置是:首頁 > Mysql

李清波 2020-03-03 Mysql 311

Myisam和Innodb的區別

1、MyISAM:默認表類型,它是基于傳統的ISAM類型,它是存儲記錄和文件的標準方法。不是事務安全的,而且不支持外鍵,如果執行大量的select,insert MyISAM比較適合。

2、InnoDB:支持事務安全的引擎,支持外鍵、行鎖、事務是他的最大特點。如果有大量的update和insert,建議使用InnoDB,特別是針對多個并發和QPS較高的情況。

在Thinkphp環境下測試

插入:MyISAM的速度比InnoDB快上一倍左右,

更新:MyISAM的速度比InnoDB快一些,

查詢:MyISAM的速度比InnoDB慢一些,


1、myisam只支持表級鎖 Innodb支持行級鎖

2、myisam不支持事務 Innodb支持事務

3、myisam不支持外鍵 Innodb支持外鍵

4、myisam支持全文索引,Innodb不支持

5、myisam本身存儲了表的總數據行,Innodb沒有存儲,查總行數myisam更快,如果加了查詢條件兩者就沒有區別了


Myisam和Innodb究竟該怎么選擇

數據庫有外鍵嗎?

需要事務支持嗎?

需要全文索引嗎?


Innodb的行鎖模式有以下幾種:共享鎖,排他鎖,意向共享鎖(表鎖),意向排他鎖(表鎖),間隙鎖。

注意:當語句沒有使用索引,innodb不能確定操作的行,這個時候就使用的意向鎖,也就是表鎖


聚簇索引和非聚簇索引


聚簇索引主要應用于Innodb

非聚簇索引主要應用于Myisam

表數據按照索引的順序來存儲的,也就是說索引項的順序與表中記錄的物理順序一致。對于聚集索引,葉子結點即存儲了真實的數據行,不再有另外單獨的數據頁。 在一張表上最多只能創建一個聚集索引,因為真實數據的物理順序只能有一種。

非聚集索引。表數據存儲順序與索引順序無關。對于非聚集索引,葉結點包含索引字段值及指向數據頁數據行的邏輯指針,其行數量與數據表行數據量一致。


評論