mysql的存储引擎详解_MySQL常见存储引擎详解
通過執(zhí)行show engines命令查看MySQL中支持哪些存儲(chǔ)引擎
MySQL存儲(chǔ)引擎屬性對比
設(shè)置表的存儲(chǔ)引擎的方法
在my.cnf配置文件中設(shè)置default-storage-engine參數(shù)表示設(shè)置默認(rèn)存儲(chǔ)引擎在MySQL的連接上設(shè)置當(dāng)前連接的默認(rèn)存儲(chǔ)引擎
mysql> set default_storage_engine=innodb;
創(chuàng)建表的時(shí)候通過engine=語句指定該表的存儲(chǔ)引擎
CREATE TABLE t1 (i INT) ENGINE = INNODB;
在表創(chuàng)建之后通過alter語句修改表的存儲(chǔ)引擎
ALTER TABLE t1 ENGINE = csv;
Innodb 存儲(chǔ)引擎
存儲(chǔ)引擎InnoDB是目前MySQL版本默認(rèn)的存儲(chǔ)引擎,也是MySQL推薦使用的存儲(chǔ)引擎,是集高可靠性和高性能于一身的存儲(chǔ)引擎。
在MySQL5.7版本中,除非在配置文件中顯視指定default storage engine或者創(chuàng)建表時(shí)顯視使用engine=語句指定其它的存儲(chǔ)引擎,否則默認(rèn)都是InnoDB
InnoDB存儲(chǔ)引擎的優(yōu)勢在于:
DML語句支持事務(wù)功能,保證ACID特性行級鎖的使用保證了高并發(fā)的屬性InnoDB對有主鍵的表會(huì)依據(jù)主鍵優(yōu)化查詢性能,也稱聚簇索引,將所有數(shù)據(jù)存儲(chǔ)在聚簇索引上以減少對主鍵查詢的IO消耗為保證數(shù)據(jù)的一致性, InnoDB還支持外鍵屬性,確保有外鍵約束的表之間不會(huì)有不一致的數(shù)據(jù)當(dāng)服務(wù)器硬件或者軟件故障導(dǎo)致MySQL重啟后, InnoDB會(huì)自動(dòng)識(shí)別已經(jīng)在故障之前提交的數(shù)據(jù),并回退所有故障時(shí)未提交的數(shù)據(jù),最大限度的保護(hù)數(shù)據(jù)不會(huì)丟失(crash recovery)
InnoDB存儲(chǔ)引擎的屬性
Myisam 存儲(chǔ)引擎
MyISAM存儲(chǔ)引擎是MySQL老版本的默認(rèn)存儲(chǔ)引擎,由于其表級鎖的特性,所以限制了其在讀寫操作時(shí)的性能,常用在只讀表上或者讀操作占絕大多數(shù)的表上,比如一些web應(yīng)用和數(shù)據(jù)倉庫相關(guān)表
每個(gè)MyISAM表都會(huì)在磁盤上生成三個(gè)文件,表名和文件名相同但后綴不同,.frm文件存儲(chǔ)表的結(jié)構(gòu)信息,.MYD文件存儲(chǔ)表的數(shù)據(jù)信息,.MYI文件存儲(chǔ)表的索引信息
Memory 存儲(chǔ)引擎
Memory存儲(chǔ)引擎將所有數(shù)據(jù)存儲(chǔ)在內(nèi)存中以便加快對某些不重要數(shù)據(jù)的訪問速度
此存儲(chǔ)引擎的使用范圍已經(jīng)變小,因?yàn)镮nnoDB已經(jīng)提供了數(shù)據(jù)緩存區(qū)以便對將經(jīng)常訪問的數(shù)據(jù)緩存在內(nèi)存中
當(dāng)MySQL重啟時(shí), Memory表中的數(shù)據(jù)會(huì)丟失,但表結(jié)構(gòu)還在Memory只適用在只讀表或者讀操作占絕大多數(shù)的情況,因?yàn)閷Ρ淼膶懖僮饕矔?huì)導(dǎo)致表鎖大大限制了并發(fā)性
Memory表創(chuàng)建之后,在磁盤文件會(huì)生成一個(gè)相同表名的文件,后綴為.frm,僅存儲(chǔ)表結(jié)構(gòu)而不存儲(chǔ)表數(shù)據(jù)
CSV 存儲(chǔ)引擎
Csv存儲(chǔ)引擎下的表對應(yīng)了文本文件,其中的數(shù)據(jù)用逗號(hào)隔開, csv表可用來以csv格式導(dǎo)入和導(dǎo)出表
當(dāng)創(chuàng)建一個(gè)csv表時(shí),磁盤會(huì)生成三個(gè)以表名為名字的文件, .frm存儲(chǔ)表的結(jié)構(gòu)信息而.CSV文件用來存儲(chǔ)以逗號(hào)隔開的數(shù)據(jù)信息, .CSM文件用來存儲(chǔ)表的元數(shù)據(jù),包括表的狀態(tài)和有多少行數(shù)據(jù)信息
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 存儲(chǔ)引擎
Archive存儲(chǔ)引擎表用來存儲(chǔ)大量未加索引的歷史歸檔數(shù)據(jù)
archive表會(huì)在磁盤創(chuàng)建兩個(gè)文件, .frm文件用來存儲(chǔ)表結(jié)構(gòu)信息,.ARZ文件用來存儲(chǔ)歷史歸檔數(shù)據(jù)Archive表支持insert, replace和select語句,但不支持delete和update語句
Archive表支持行級鎖Archive支持auto_incrment列,且其列上可以包含一個(gè)索引,但在其他字段上不能創(chuàng)建索引
Archive不支持對auto_incrment列插入一個(gè)小于當(dāng)前最大值的數(shù)據(jù)Archive存儲(chǔ)引擎會(huì)用zlib來壓縮數(shù)據(jù)
Blackhole 存儲(chǔ)引擎
Merge存儲(chǔ)引擎可以將一批字段相同,索引相同且順序相同的MyISAM表在邏輯上看做是同一個(gè)
Merge表在磁盤上創(chuàng)建兩個(gè)文件, .frm文件保存表的結(jié)構(gòu)信息, .MRG文件包含所有被視作同一個(gè)表的MyISAM表
Merge表支持select,delete,update,insert語句執(zhí)行
創(chuàng)建merge表時(shí)需要執(zhí)行union子句,用來將指定的MyISAM結(jié)合起來, insert_method選項(xiàng)用來指定插入語句是將數(shù)據(jù)插入到第一個(gè)表FIRST還是最后一個(gè)表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 存儲(chǔ)引擎
Federated存儲(chǔ)引擎提供了從一個(gè)MySQL實(shí)例連接其它實(shí)例上數(shù)據(jù)的能力Federated存儲(chǔ)引擎默認(rèn)是disable狀態(tài),如果要開啟,則需要在啟動(dòng)MySQL時(shí)使用—federated選項(xiàng)
Example 存儲(chǔ)引擎
Example存儲(chǔ)引擎只存在于MySQL源碼中,只針對開發(fā)者,對實(shí)際的數(shù)據(jù)庫使用者沒有太大的意義Example表只保留表結(jié)構(gòu),本身不保存數(shù)據(jù)
NDB 存儲(chǔ)引擎
NDB存儲(chǔ)引擎專用在MySQL Cluster軟件中,是MySQL自己推出的提高可用性和可靠性的集群軟件
總結(jié)
以上是生活随笔為你收集整理的mysql的存储引擎详解_MySQL常见存储引擎详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5 判断分享,好程序员HTML5
- 下一篇: mysql 换服务器_更换MYSQL后数