mysql的存储引擎详解_MySQL常见存储引擎详解
通過執行show engines命令查看MySQL中支持哪些存儲引擎
MySQL存儲引擎屬性對比
設置表的存儲引擎的方法
在my.cnf配置文件中設置default-storage-engine參數表示設置默認存儲引擎在MySQL的連接上設置當前連接的默認存儲引擎
mysql> set default_storage_engine=innodb;
創建表的時候通過engine=語句指定該表的存儲引擎
CREATE TABLE t1 (i INT) ENGINE = INNODB;
在表創建之后通過alter語句修改表的存儲引擎
ALTER TABLE t1 ENGINE = csv;
Innodb 存儲引擎
存儲引擎InnoDB是目前MySQL版本默認的存儲引擎,也是MySQL推薦使用的存儲引擎,是集高可靠性和高性能于一身的存儲引擎。
在MySQL5.7版本中,除非在配置文件中顯視指定default storage engine或者創建表時顯視使用engine=語句指定其它的存儲引擎,否則默認都是InnoDB
InnoDB存儲引擎的優勢在于:
DML語句支持事務功能,保證ACID特性行級鎖的使用保證了高并發的屬性InnoDB對有主鍵的表會依據主鍵優化查詢性能,也稱聚簇索引,將所有數據存儲在聚簇索引上以減少對主鍵查詢的IO消耗為保證數據的一致性, InnoDB還支持外鍵屬性,確保有外鍵約束的表之間不會有不一致的數據當服務器硬件或者軟件故障導致MySQL重啟后, InnoDB會自動識別已經在故障之前提交的數據,并回退所有故障時未提交的數據,最大限度的保護數據不會丟失(crash recovery)
InnoDB存儲引擎的屬性
Myisam 存儲引擎
MyISAM存儲引擎是MySQL老版本的默認存儲引擎,由于其表級鎖的特性,所以限制了其在讀寫操作時的性能,常用在只讀表上或者讀操作占絕大多數的表上,比如一些web應用和數據倉庫相關表
每個MyISAM表都會在磁盤上生成三個文件,表名和文件名相同但后綴不同,.frm文件存儲表的結構信息,.MYD文件存儲表的數據信息,.MYI文件存儲表的索引信息
Memory 存儲引擎
Memory存儲引擎將所有數據存儲在內存中以便加快對某些不重要數據的訪問速度
此存儲引擎的使用范圍已經變小,因為InnoDB已經提供了數據緩存區以便對將經常訪問的數據緩存在內存中
當MySQL重啟時, Memory表中的數據會丟失,但表結構還在Memory只適用在只讀表或者讀操作占絕大多數的情況,因為對表的寫操作也會導致表鎖大大限制了并發性
Memory表創建之后,在磁盤文件會生成一個相同表名的文件,后綴為.frm,僅存儲表結構而不存儲表數據
CSV 存儲引擎
Csv存儲引擎下的表對應了文本文件,其中的數據用逗號隔開, csv表可用來以csv格式導入和導出表
當創建一個csv表時,磁盤會生成三個以表名為名字的文件, .frm存儲表的結構信息而.CSV文件用來存儲以逗號隔開的數據信息, .CSM文件用來存儲表的元數據,包括表的狀態和有多少行數據信息
mysql> create table t(id int not null, name char(10) not null) engine=csv;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t values (1,'one'),(2,'two');
Query OK, 2 rows affected (0.00 sec)
Records: 2? Duplicates: 0? Warnings: 0
mysql> select * from t;
+----+------+
| id | name |
+----+------+
|? 1 | one? |
|? 2 | two? |
+----+------+
2 rows in set (0.00 sec)
mysql> system ls /usr/local/mysql/data/test
db.opt? t.CSM? t.CSV? t.frm
mysql> system cat /usr/local/mysql/data/test/t.CSV
1,"one"
2,"two"
ARCHIVE 存儲引擎
Archive存儲引擎表用來存儲大量未加索引的歷史歸檔數據
archive表會在磁盤創建兩個文件, .frm文件用來存儲表結構信息,.ARZ文件用來存儲歷史歸檔數據Archive表支持insert, replace和select語句,但不支持delete和update語句
Archive表支持行級鎖Archive支持auto_incrment列,且其列上可以包含一個索引,但在其他字段上不能創建索引
Archive不支持對auto_incrment列插入一個小于當前最大值的數據Archive存儲引擎會用zlib來壓縮數據
Blackhole 存儲引擎
Merge存儲引擎可以將一批字段相同,索引相同且順序相同的MyISAM表在邏輯上看做是同一個
Merge表在磁盤上創建兩個文件, .frm文件保存表的結構信息, .MRG文件包含所有被視作同一個表的MyISAM表
Merge表支持select,delete,update,insert語句執行
創建merge表時需要執行union子句,用來將指定的MyISAM結合起來, insert_method選項用來指定插入語句是將數據插入到第一個表FIRST還是最后一個表LAST中,或者不指定或NO表不允許插入
create table t1 (a int not null auto_increment primary key, message char(20)) engine=myisam;
create table t2(a int not null auto_increment primary key , message char(20)) engine=myisam;
insert into t1 (message) values ('testing'),('table'),('t1');
insert into t2 (message) values ('testing'),('table'),('t2');
create table total(a int not null auto_increment, message char(20),index(a)) engine=merge union=(t1,t2) insert_method=last;
select * from total;
mysql> select * from total;
+---+---------+
| a | message |
+---+---------+
| 1 | testing |
| 2 | table? |
| 3 | t1? ? ? |
| 1 | testing |
| 2 | table? |
| 3 | t2? ? ? |
+---+---------+
6 rows in set (0.00 sec)
Federated 存儲引擎
Federated存儲引擎提供了從一個MySQL實例連接其它實例上數據的能力Federated存儲引擎默認是disable狀態,如果要開啟,則需要在啟動MySQL時使用—federated選項
Example 存儲引擎
Example存儲引擎只存在于MySQL源碼中,只針對開發者,對實際的數據庫使用者沒有太大的意義Example表只保留表結構,本身不保存數據
NDB 存儲引擎
NDB存儲引擎專用在MySQL Cluster軟件中,是MySQL自己推出的提高可用性和可靠性的集群軟件
總結
以上是生活随笔為你收集整理的mysql的存储引擎详解_MySQL常见存储引擎详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5 判断分享,好程序员HTML5
- 下一篇: linux划分5t硬盘,关于磁盘分区(以