Mysql資料庫3種存儲(MyISAM、MEMORY、InnoDB)引擎區別:
1、Myisam是Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam。MEMORY、InnoDB不是默認存儲引擎。
2、InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留數據和索引。
Mysql資料庫3種存儲(MyISAM、MEMORY、InnoDB)區別對比:
1、MyISAM
它不支持事務,也不支持外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT為主的應用基本都可以使用這個引擎來創建表。
數據文件和索引文件可以放置在不同的目錄,平均分配IO,獲取更快的速度。要指定數據文件和索引文件的路徑,需要在創建表的時候通過DATA DIRECTORY和INDEX DIRECTORY語句指定,文件路徑需要使用絕對路徑。
2、MEMORY
memory使用存在內存中的內容來創建表。每個MEMORY表實際對應一個磁碟文件,格式是.frm。MEMORY類型的表訪問非常快,因為它到數據是放在內存中的,並且默認使用HASH索引,但是一旦伺服器關閉,表中的數據就會丟失,但表還會繼續存在。
默認情況下,memory數據表使用散列索引,利用這種索引進行「相等比較」非常快,但是對「范圍比較」的速度就慢多了。因此,散列索引值適合使用在"="和"<=>"的操作符中,不適合使用在"<"或">"操作符中,也同樣不適合用在order by字句里。如果確實要使用"<"或">"或betwen操作符,可以使用btree索引來加快速度。
存儲在MEMORY數據表裡的數據行使用的是長度不變的格式,因此加快處理速度,這意味著不能使用BLOB和TEXT這樣的長度可變的數據類型。VARCHAR是一種長度可變的類型,但因為它在MySQL內部當作長度固定不變的CHAR類型,所以可以使用。
3、InnoDB
InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留數據和索引。
(1)自動增長列:
InnoDB表的自動增長列可以手工插入,但是插入的如果是空或0,則實際插入到則是自動增長後到值。可以通過"ALTER TABLE...AUTO_INCREMENT=n;"語句強制設置自動增長值的起始值,默認為1,但是該強制到默認值是保存在內存中,資料庫重啟後該值將會丟失。
可以使用LAST_INSERT_ID()查詢當前線程最後插入記錄使用的值。如果一次插入多條記錄,那麼返回的是第一條記錄使用的自動增長值。對於InnoDB表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一列,但是對於MyISAM表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列是按照組合索引到前面幾列排序後遞增的。
(2)外鍵約束:
MySQL支持外鍵的存儲引擎只有InnoDB,在創建外鍵的時候,父表必須有對應的索引,子表在創建外鍵的時候也會自動創建對應的索引。
㈡ mysql資料庫支持的存儲引擎有哪些默認的存儲引擎是什麼主要特性有什麼
1、MySQL常見的存儲引擎有:InnoDB、MyISAM。
2、Mysql 5.0之後的版本,默認的存儲引擎就是InnoDB。
3、各自主要特點有:
事務:MyISAM不支持,InnoDB支持。
鎖級別: MyISAM 表級鎖,InnoDB 行級鎖及外鍵約束。
MyISAM存儲表的總行數;InnoDB不存儲總行數。
MyISAM採用非聚集索引,B+樹葉子存儲指向數據文件的指針。InnoDB主鍵索引採用聚集索引,B+樹葉子存儲數據。
MyISAM適合場景: 插入不頻繁,查詢非常頻繁,如果執行大量的SELECT,MyISAM是更好的選擇, 沒有事務。
InnoDB適合場景: 可靠性要求比較高,或者要求事務; 表更新和查詢都相當的頻繁, 大量的INSERT或UPDATE。
㈢ mysql存儲引擎類型有哪些
1、MyISAM
使用這個存儲引擎,每個MyISAM在磁碟上存儲成三個文件。
(1)frm文件:存儲表的定義數據
(2)MYD文件:存放表具體記錄的數據
(3)MYI文件:存儲索引
frm和MYI可以存放在不同的目錄下。MYI文件用來存儲索引,但僅保存記錄所在頁的指針,索引的結構是B+樹結構。下面這張圖就是MYI文件保存的機制:
從這張圖可以發現,這個存儲引擎通過MYI的B+樹結構來查找記錄頁,再根據記錄頁查找記錄。並且支持全文索引、B樹索引和數據壓縮。
支持數據的類型也有三種:
(1)靜態固定長度表
這種方式的優點在於存儲速度非常快,容易發生緩存,而且表發生損壞後也容易修復。缺點是占空間。這也是默認的存儲格式。
(2)動態可變長表
優點是節省空間,但是一旦出錯恢復起來比較麻煩。
(3)壓縮表
上面說到支持數據壓縮,說明肯定也支持這個格式。在數據文件發生錯誤時候,可以使用check table工具來檢查,而且還可以使用repair table工具來恢復。
有一個重要的特點那就是不支持事務,但是這也意味著他的存儲速度更快,如果你的讀寫操作允許有錯誤數據的話,只是追求速度,可以選擇這個存儲引擎。
2、InnoDB
InnoDB是默認的資料庫存儲引擎,他的主要特點有:
(1)可以通過自動增長列,方法是auto_increment。
(2)支持事務。默認的事務隔離級別為可重復度,通過MVCC(並發版本控制)來實現的。
(3)使用的鎖粒度為行級鎖,可以支持更高的並發;
(4)支持外鍵約束;外鍵約束其實降低了表的查詢速度,但是增加了表之間的耦合度。
(5)配合一些熱備工具可以支持在線熱備份;
(6)在InnoDB中存在著緩沖管理,通過緩沖池,將索引和數據全部緩存起來,加快查詢的速度;
(7)對於InnoDB類型的表,其數據的物理組織形式是聚簇表。所有的數據按照主鍵來組織。數據和索引放在一塊,都位於B+數的葉子節點上;
當然InnoDB的存儲表和索引也有下面兩種形式:
(1)使用共享表空間存儲:所有的表和索引存放在同一個表空間中。
(2)使用多表空間存儲:表結構放在frm文件,數據和索引放在IBD文件中。分區表的話,每個分區對應單獨的IBD文件,分區表的定義可以查看我的其他文章。使用分區表的好處在於提升查詢效率。
對於InnoDB來說,最大的特點在於支持事務。但是這是以損失效率來換取的。
3、Memory
將數據存在內存,為了提高數據的訪問速度,每一個表實際上和一個磁碟文件關聯。文件是frm。
(1)支持的數據類型有限制,比如:不支持TEXT和BLOB類型,對於字元串類型的數據,只支持固定長度的行,VARCHAR會被自動存儲為CHAR類型;
(2)支持的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為MEMORY存儲引擎的瓶頸;
(3)由於數據是存放在內存中,一旦伺服器出現故障,數據都會丟失;
(4)查詢的時候,如果有用到臨時表,而且臨時表中有BLOB,TEXT類型的欄位,那麼這個臨時表就會轉化為MyISAM類型的表,性能會急劇降低;
(5)默認使用hash索引。
(6)如果一個內部表很大,會轉化為磁碟表。
在這里只是給出3個常見的存儲引擎。使用哪一種引擎需要靈活選擇,一個資料庫中多個表可以使用不同引擎以滿足各種性能和實際需求,使用合適的存儲引擎,將會提高整個資料庫的性能