【MySQL系列】- 常用MySQL存儲引擎
數(shù)據庫存儲引擎是數(shù)據庫底層軟件組織,數(shù)據庫管理系統(tǒng)使用數(shù)據引擎進行創(chuàng)建、查詢、更新和刪除數(shù)據。不同的存儲引擎提供不同的存儲機制、索引機制、鎖定水平等功能。不同的存儲引擎,都有其特定的功能及特定應用場景。
MySQL常用存儲引擎有一下幾類:
1、InnoDB存儲引擎
InnoDB是事務性數(shù)據庫首選引擎,InnoDB從Mysql5.5.5開始就成為數(shù)據默認的存儲引擎,是MySQL8.0之后最重要,使用最廣泛的存儲引擎。支持事務安全(ACID),支持行鎖定和外鍵。
InnoDB主要特性:
-
InnoDB支持事務:事務是數(shù)據庫操作的基本單位,它是一組數(shù)據庫操作的集合,要全部執(zhí)行成功,要么全部不執(zhí)行。InnoDB存儲引擎支持ACID事務,保證了數(shù)據庫的可靠性和一致性。
在MySQL中,使用START TRANSCTION語句開啟一個事務,使用COMMOT語句提交事務,使用ROLLBACK語句回滾事務。
-
執(zhí)行行級鎖:行級鎖是一種并發(fā)控制機制,它可以在不同事務之間實現(xiàn)數(shù)據的隔離性和一致性。InnoDB存儲引擎支持行級鎖,能夠提高并發(fā)性能和可擴展性。
在MySQL中,可以使用SELECT … FOR UPDATE語句來獲取行級鎖,保證在更新操作時,其他事務不能修改行數(shù)據。
-
支持MVCC:MVCC是一種多版本并發(fā)控制機制,它可以在不同事務之間實現(xiàn)數(shù)據的隔離性和一致性。InnoDB存儲引擎支持MVCC,能夠保證不同事務之間的隔離性和一致性。
在MySQL中,可以使用READ COMMITTEND隔離級別來支持MVCC機制。在READ COMMITTED隔離級別下,每個事務只能看到已提交的數(shù)據版本,不能看到其他事務未提交的數(shù)據版本。
-
支持外鍵:在MySQL中,可以使用FOREIGN KEY約束來支持外鍵約束。在創(chuàng)建表時,可以使用FOREIGN KEY語句定義外鍵約束,確保在進行數(shù)據操作時,關聯(lián)表之間的數(shù)據一致性。
-
支持自動增長列:在MySQL中,可以使用AUTO_INCREMENT關鍵字定義自動增長列。在使用InnoDB存儲引擎時,自動增長列實現(xiàn)方式時在表中創(chuàng)建一個名為AUTO_INCREMENT的隱藏列,該列用于存儲下一個自動增長的值。
-
支持崩潰恢復:InnoDB存儲引擎支持崩潰恢復,能夠保證數(shù)據庫在崩潰后可以快速恢復到正常狀態(tài)。當數(shù)據庫發(fā)生崩潰時,InnoDB存儲引擎會自動啟動崩潰恢復過程,將未完成的事務進行回滾或者重做,從而保證數(shù)據的一致性。
2、MyISAM存儲引擎
MyISAM基于ISAM存儲引擎,并對其進行擴展。在 Web,數(shù)據倉儲和其他應用環(huán)境使用的存儲引擎較多。MyISAM擁有較高的插入、查詢速度,但不支持事務和外鍵。
MyISAM主要特性:
- 不支持事務;
- 表級鎖定:在MySQL中,MyISAM存儲引擎中,當發(fā)生數(shù)據更新時,會鎖定整個表,以防止其他會話對該表中數(shù)據的同時修改所致的混亂。這樣做可以使得操作簡單,但是會減少并發(fā)量。
- 讀寫相互阻塞:在MyISAM類型表中,即不可以在向數(shù)據表中寫入數(shù)據的同時另一個會話也向該表寫入數(shù)據,也不允許其他的會話讀取該表中的數(shù)據。只允許多個會話同時讀取該數(shù)據表中的數(shù)據。
- 只會緩存索引,不會緩存數(shù)據:緩存,是指數(shù)據庫在訪問磁盤數(shù)據時,將更多的數(shù)據讀取進入內存,這樣可以使得當訪問這些數(shù)據時,直接從內存中讀取而不是再次訪問硬盤。MyISAM可以通過key_buffer_size緩存索引,以減少磁盤I/O,提升訪問性能。MyISAM數(shù)據表并不會緩存數(shù)據。
- 讀取速度較快,占用資源較少;
- 不支持外鍵約束;
- 支持全文索引;
MyISAM適用場景:
- 不需要事務支持的場景;
- 讀取操作比較多,寫入操作較少;
- 數(shù)據并發(fā)較低的場景;
- 硬件條件比較差的場景;
- 在配置數(shù)據庫讀寫分離場景下,從庫可以使用MyISAM索引;
3、Memory存儲引擎
MySQL中Memory存儲引擎是一個置于內存中的表,其采用的存儲介質是內存。響應速度很快。但是當MySQL守護進程崩潰的時候數(shù)據會丟失。Memory存儲引擎是存儲的數(shù)據類型是長度不變的類型,blob/text類的數(shù)據類型不可用。
Memory存儲引擎特性:
-
存儲瞬時非關鍵數(shù)據;
-
內存存儲,可實現(xiàn)快速訪問和低延遲。
-
只讀或讀取是主要數(shù)據訪問模式:每個基于MEMORY存儲引擎的表實際對應一個磁盤文件。該文件的文件名與表名相同,類型為frm類型。該文件中只存儲表的結構。而其數(shù)據文件,都是存儲在內存中,這樣有利于數(shù)據的快速處理,提高整個表的效率。值得注意的是,服務器需要有足夠的內存來維持MEMORY存儲引擎的表的使用。如果不需要了,可以釋放內存,甚至刪除不需要的表。
-
支持數(shù)據類型有限:不支持Text和Blob數(shù)據類型,對于字符串類型的數(shù)據,只支持固定長度的行,VARCHAR會被自動存儲為CHAR類型。
-
支持表級鎖:在訪問量比較大時,表級鎖會成為MEMORY存儲引擎的瓶頸。
-
查詢中存在臨時表且表中有BLOB、TEXT類型的字段,那么在這個臨時表會自動轉化為MyISAM類型的表。性能會急劇降低。
-
默認索引使用Hash索引。
-
內存表特別大時,自動轉換為MyISAM類型實體表。
4、CSV存儲引擎
CSV存儲引擎是以CSV文件的方式存儲數(shù)據。CSV是MySQL中相對比較簡單并方便的存儲引擎。它簡單是因為其創(chuàng)建和使用簡單。存儲文件是CSV文件,可以直接對CSV文件進行修改。CSV存儲引擎只有在MySQL5.0版本之后才支持。文章來源:http://www.zghlxwxcb.cn/news/detail-700859.html
CSV存儲引擎特性:
- 數(shù)據以文本方式存儲:.CSV文件存儲表內容,CSM文件存儲表的元數(shù)據如表狀態(tài)和數(shù)據量,.frm文件存儲表結構信息。
- 列不能為NULL;
- 不支持索引;
- 可對數(shù)據文件進行直接編輯;
CSV存儲引擎的特性,決定CSV非常適合在數(shù)據庫中擔任中間交換表的角色。如對數(shù)據進行導入運維時,可以使用EXCEL轉為CSV中直接復制覆蓋表,并通過SQL語句對數(shù)據進行操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-700859.html
到了這里,關于【MySQL系列】- 常用MySQL存儲引擎的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!