設(shè)計電子商務(wù)網(wǎng)站主頁鄭州seo教程
存儲引擎
MySQL的體系結(jié)構(gòu)
0、客戶端連機(jī)器【java、Python、JDBC等】
1、【MySQL服務(wù)器-連接層】認(rèn)證,授權(quán),連接池
2、【MySQL服務(wù)器-服務(wù)層】 {SQL接口(DML、DDL、存儲過程、觸發(fā)器)、解析器、查詢優(yōu)化器、緩存}
3、【MySQL服務(wù)器-存儲引擎層】{InnoDB、MyISAM、NDB、Archive。。。??刹灏问絵
? 控制的是MySQL當(dāng)中數(shù)據(jù)存儲和提取的方式,服務(wù)器會通過存儲引擎和API進(jìn)行通信和交互。
? 【索引是在存儲引擎層實現(xiàn)的,也就意味著不同的存儲引擎,索引的結(jié)構(gòu)是不一樣的】
? InnoDB是MySQL5.5版本之后默認(rèn)的存儲引擎。
4、【MySQL服務(wù)器-存儲層】持久化到磁盤當(dāng)中的文件和日志。
存儲引擎簡介
? 引擎沒有好壞之分,不同的場景使用不同的引擎。
? 存儲引擎是MySQL當(dāng)中特有的,就是存儲數(shù)據(jù),建立索引,更新/查詢數(shù)據(jù)等技術(shù)的實現(xiàn)方式。存儲引擎是基于表的,而不是基于庫的,所以存儲引擎也可以被稱為表類型。
? show create table user;
CREATE TABLE `user` (`user_id` int(11) NOT NULL,`username` varchar(60) DEFAULT NULL,`user_status` char(1) DEFAULT NULL,PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;show engines;
ENGINE=InnoDB DEFAULT CHARSET=utf8 指定存儲引擎。
存儲引擎特點
1、InnoDB
? 是一種兼顧高可靠性和高性能的通用存儲引擎,在MySQL5.5之后,InnoDB是默認(rèn)的MySQL存儲引擎。
特點:
? 1、DML操作遵循ACID模型,支持事務(wù)。
? 2、行級鎖,提高并發(fā)訪問性能。
? 3、支持外鍵 Foreign key約束,保證數(shù)據(jù)完整性和準(zhǔn)確性。
磁盤文件:
? 每一個InnoDB表都會對應(yīng)磁盤文件。
? xxx.ibd:xxx代表的是表名,InnoDB引擎的每張表都會對應(yīng)這樣的一個表空間文件,存儲該表的表結(jié)構(gòu)(frm,sdi)、數(shù)據(jù)、和索引。
? 參數(shù):innodb_file_per_table
?
show variables like 'innodb_file_per_table';
ibd2sdi emp.ibd 就會返回數(shù)據(jù)文件的json記錄。
邏輯存儲結(jié)構(gòu):
1、tablespace:表空間
2、segment:段
3、Extent:區(qū),大小固定,為1M,可以包含64個頁。
4、Page:頁,大小固定,為16K
5、Row:行【再里邊就包含事務(wù)id、指針、和列記錄了 】
2、MyISAM
? 是MySQL早期默認(rèn)的存儲引擎。
特點:
不支持事務(wù)、不支持行級鎖、不支持外鍵
支持表鎖,訪問速度快
磁盤文件:
tb_book.MYD :數(shù)據(jù)
tb_book.MYI:索引
tb_book_448(序號自增).sdi:表結(jié)構(gòu)
3、Memory
? 表數(shù)據(jù)是存儲在內(nèi)存當(dāng)中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為臨時表或緩存使用。
特點:
? 由于放到內(nèi)存中,訪問速度快。
? 支持hash索引(默認(rèn))
文件:
xxx.sdi:存儲表結(jié)構(gòu)信息,因為它的數(shù)據(jù)都是存儲到內(nèi)存中,所以不持久化到磁盤。
4、存儲引擎特點-總結(jié):
存儲引擎選擇
InnoDB:對數(shù)據(jù)一致性要求較高;
MyISAM:讀操作和插入操作為主?!救罩竞驮u論】
Memory:做緩存。但是內(nèi)存大小有限制。