Mysql 存储引擎有哪些以及MyISAM和InnoDB区别
1、InnoDB 存儲引擎
InnoDB 是事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,InnoDB 是默認的 MySQL引擎。
2、MyISAM 存儲引擎
MyISAM 基于 ISAM 存儲引擎,并對其進行擴展。它是在 Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM 擁有較高的插入、查詢速度,但不支持事物。
3、MEMORY 存儲引擎
MEMORY 存儲引擎將表中的數據存儲到內存中,未查詢和引用其他表數據提供快速訪問。
4、NDB 存儲引擎
DB 存儲引擎是一個集群存儲引擎,類似于 Oracle 的 RAC,但它是 Share Nothing 的架構,因此能提供更高級別的高可用性和可擴展性。NDB 的特點是數據全部放在內存中,因此通過主鍵查找非常快。
關于 NDB,有一個問題需要注意,它的連接(join)操作是在 MySQL 數據庫層完成,不是在存儲引擎層完成,這意味著,復雜的 join 操作需要巨大的網絡開銷,查詢速度會很慢。
5、Memory (Heap) 存儲引擎
Memory 存儲引擎(之前稱為 Heap)將表中數據存放在內存中,如果數據庫重啟或崩潰,數據丟失,因此它非常適合存儲臨時數據。
6、Archive 存儲引擎
正如其名稱所示,Archive 非常適合存儲歸檔數據,如日志信息。它只支持 INSERT 和 SELECT 操作,其設計的主要目的是提供高速的插入和壓縮功能。
7、Federated 存儲引擎
Federated 存儲引擎不存放數據,它至少指向一臺遠程 MySQL 數據庫服務器上的表,非常類似于 Oracle 的透明網關。
8、Maria 存儲引擎
Maria 存儲引擎是新開發的引擎,其設計目標是用來取代原有的 MyISAM 存儲引擎,從而成為 MySQL 默認的存儲引擎。
存儲引擎 MyISAM和InnoDB區別:
1)InnoDB支持事務,MyISAM不支持。
2)MyISAM適合查詢以及插入為主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用。
3)InnoDB支持外鍵,MyISAM不支持。
4)從MySQL5.5.5以后,InnoDB是默認引擎。
5)MyISAM支持全文類型索引,而InnoDB不支持全文索引。
6)InnoDB中不保存表的總行數,select count() from table時,InnoDB需要掃描整個表計算有多少行,但MyISAM只需簡單讀出保存好的總行數即可。注:當count()語句包含where條件時MyISAM也需掃描整個表。
7)對于自增長的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯合索引。
8)清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表。MyisAM使用delete語句刪除后并不會立刻清理磁盤空間,需要定時清理,命令:OPTIMIZE table dept;
9)InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like ‘%lee%’)
10)Myisam創建表生成三個文件:.frm 數據表結構 、 .myd 數據文件 、 .myi 索引文件,Innodb只生成一個 .frm文件,數據存放在ibdata1.log現在一般都選用InnoDB,主要是MyISAM的全表鎖,讀寫串行問題,并發效率鎖表,效率低,MyISAM對于讀寫密集型應用一般是不會去選用的。
應用場景:
1.MyISAM不支持事務處理等高級功能,但它提供高速存儲和檢索,以及全文搜索能力。如果應用中需要執行大量的SELECT查詢,那么MyISAM是更好的選擇。
2.InnoDB用于需要事務處理的應用程序,包括ACID事務支持。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多用戶并發操作的性能。
總結
以上是生活随笔為你收集整理的Mysql 存储引擎有哪些以及MyISAM和InnoDB区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 装配bean的三种方式
- 下一篇: spring中的jdk动态代理(代码步骤