您好,登錄后才能下訂單哦!
前言
在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。
而MySql數據庫提供了多種存儲引擎。用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。
MySQL主要存儲引擎的區別
MySQL默認的存儲引擎是MyISAM,其他常用的就是InnoDB,另外還有MERGE、MEMORY(HEAP)等。
主要的幾個存儲引擎
MyISAM管理非事務表,提供高速存儲和檢索,以及全文搜索能力。
MyISAM是Mysql的默認存儲引擎。當create創建新表時,未指定新表的存儲引擎時,默認使用MyISAM。每個MyISAM在磁盤上存儲成三個文件。文件名都和表名相同,擴展名分別是.frm(存儲表定義)、.MYD (MYData,存儲數據)、.MYI (MYIndex,存儲索引)。數據文件和索引文件可以放置在不同的目錄,平均分布io,獲得更快的速度。
InnoDB存儲引擎用于事務處理應用程序,具有眾多特性,包括ACID事務支持,提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM存儲引擎,InnoDB寫的處理效率差一些并且會占用更多的磁盤空間以保留數據和索引。
Memory將所有數據保存在內存中,可以應用于臨時表中在需要快速查找引用和其他類似數據的環境下,可提供極快的訪問。Memory使用哈希索引,所以數據的存取速度非常快。
Merge允許MySQL DBA或開發人員將一系列等同的MyISAM表以邏輯方式組合在一起,并作為1個對象引用它們。對于諸如數據倉儲等VLDB環境十分適合。
不同存儲引擎的橫向對比
特點 | MyISAM | BDB | Memory | InnoDB |
---|---|---|---|---|
存儲限制 | 沒有 | 沒有 | 有 | 64TB |
事務安全 | 支持 | 支持 | ||
鎖機制 | 表鎖 | 頁鎖 | 表鎖 | 行鎖 |
B樹索引 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | 支持 | ||
全文索引 | 支持 | |||
集群索引 | 支持 | |||
數據緩存 | 支持 | 支持 | ||
索引緩存 | 支持 | 支持 | 支持 | |
數據可壓縮 | 支持 | |||
空間使用 | 低 | 低 | N/A | 高 |
內存使用 | 低 | 低 | 中等 | 高 |
批量插入的速度 | 高 | 高 | 高 | 低 |
支持外鍵 | 支持 |
查看和配置存儲引擎的操作
1.用show engines; 命令可以顯示當前數據庫支持的存儲引擎情況;
2.要查看表的定義結構等信息可以使用以下幾種命令:
Desc[ribe] tablename; //查看數據表的結構 Show create table tablename; //顯示表的創建語句,可以查看創建表時指定的ENGINE show table status like ‘tablename'\G顯示表的當前狀態值
3.設置或修改表的存儲引擎
創建數據庫表時設置存儲存儲引擎的基本語法是:
Create table tableName( columnName(列名1) type(數據類型) attri(屬性設置), columnName(列名2) type(數據類型) attri(屬性設置), ……..) engine = engineName
修改存儲引擎,可以用命令
Alter table tableName engine =engineName
對于整個服務器或方案,你并不一定要使用相同的存儲引擎,可以為方案中的每個表使用不同的存儲引擎。
InnoDB的存儲結構
InnoDB使用頁面存儲結構,下面是InnoDB的表空間結構圖:
Page頁面存儲格式如下圖所示:
一個頁面的存儲由以下幾部分組成:
頁面中的頁頭,最大/最小虛記錄以及頁尾都是頁面中有固定的存儲位置。
InnoDB的索引結構
InnoDB使用B+Tree的方式存儲索引。
Innodb的一個表可能包含多個索引,每個索引都使用B+樹來存儲。而索引包括聚集索引和二級索引,聚集索引使用表的主鍵作為索引鍵,包含表的所有字段。二級索引只包含索引鍵和聚集索引鍵(主鍵)的內容,不包括其他字段。每一個索引都是一棵B+樹,每棵B+樹由很多頁面組成,而每個頁面大小一般為16K。從B+樹的組織結構來看,B樹的頁面可分為:
葉子節點:B樹層次為0的頁面,存儲記錄的所有內容。
非葉子節點:B樹層次大于0的頁面,只存儲索引鍵和頁面指針。
一棵典型的B+樹結構:
從上圖可知,相同層次的頁面是用一個雙向鏈表連接起來的。
一般情況下,從B+樹的最左邊葉子節點開始,一直向右掃描,就可以得到B+樹的從小到大的所有數據。因此,對于葉子節點,有如下特征:
頁內數據是按索引鍵排序的。
頁面的任一記錄的索引鍵值不小于其左兄弟頁面的任何記錄。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。