理解存儲引擎MyISAM與InnoDB
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