1. 程式人生 > >理解存儲引擎MyISAM與InnoDB

理解存儲引擎MyISAM與InnoDB

全文索引 訪問 應用 較高的 支持 丟失 事務安全 排序 iso

1、MyISAM:默認表類型,它是基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法。不是事務安全的,而且不支持外鍵,如果執行大量的select,insert   MyISAM比較適合

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

事務的ACID屬性:atomicity,consistent,isolation,durable。

關於死鎖:

什麽是死鎖?當兩個事務都需要獲得對方持有的排他鎖才能完成事務,這樣就導致了循環鎖等待,也就是常見的死鎖類型。

解決死鎖的方法:

1、 數據庫參數

2、 應用中盡量約定程序讀取表的順序一樣

3、 應用中處理一個表時,盡量對處理的順序排序

4、 調整事務隔離級別(避免兩個事務同時操作一行不存在的數據,容易發生死鎖)

3、關於count()函數

myisam保存有表的總行數,如果select count(*) from table;會直接取出出該值

innodb沒有保存表的總行數,如果使用select count(*) from table;就會遍歷整個表,消耗相當大,但是在加了wehre 條件後,myisam和innodb處理的方式都一樣。

1、可以用 show create table tablename 命令看表的引擎類型。

3、可以執行以下命令來切換非事務表到事務(數據不會丟失),innodb表比myisam表更安全:alter table tablename type=innodb;
  或者使用 alter table tablename engine = innodb;

下面先讓我們回答一些問題:

◆你的數據庫有外鍵嗎?

◆你需要事務支持嗎?

◆你需要全文索引嗎?

◆你經常使用什麽樣的查詢模式?

◆你的數據有多大?

參考:

https://www.cnblogs.com/y-rong/p/8110596.html

理解存儲引擎MyISAM與InnoDB