1.存储引擎介绍
相当于Linux文件系统,组织存储表数据
2.存储引擎的种类
mysql> mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
innoDB
MyISAM
CSV
Memory
其他存储引擎:
mariadb : InnoDB,TokuDB,Myrocks
Percona :xtradb,TokuDB,Myrocks
TokuDB,Myrocks:比较适合在写入操作较多的场景,数据量极大的场景。
原因: 插入性能很高,压缩比较高
适合监控类的业务。
3.InnoDB存储引擎的核心特性
===============================
面试题:
1.InnoDB存储引擎的特性
2.InnoDB与MyISAM的区别
===============================
#特性:
MVCC:多版本并发控制
聚簇索引 PK
事务:innoDB独有的
行级锁 而MyISAM只支持表锁
外键 FK
复制支持高级特性:GTID等高级特性
AHI自适应hash索引
支持热备 MyISAM只支持温备
ACSR(自动故障恢复)

4.存储引擎的操作
存储引擎是针对表来说的 *****
show engines; #查看支持的引擎
select @@default_storage_engine; #查看默认存储引擎
查询所有非INNODB的表 , 并且提出修改建议
mysql> SELECT
-> table_schema,
-> table_name ,
-> ENGINE ,
-> CONCAT("alter table ",table_schema,".",table_name," engine=innodb;") AS "修改建议"
-> FROM information_schema.tables
-> WHERE table_schema NOT IN ('sys','information_schema','performance_schema','mysql')
-> AND ENGINE <> 'innodb';
+--------------+------------+--------+--------------------------------------+
| table_schema | table_name | ENGINE | 修改建议 |
+--------------+------------+--------+--------------------------------------+
| test | mt | MyISAM | alter table test.mt engine=innodb; |
| test | test | MyISAM | alter table test.test engine=innodb; |
+--------------+------------+--------+--------------------------------------+
2 rows in set (0.01 sec)
2.修改表的存储引擎
alter table database.table engine=innodb;
扩展:碎片问题如何解决
由于业务中有大量的delete操作,产生了大量的碎片。
(1)表数据逻辑导出,删除原表,重新导入(比较彻底,但是有风险)
(2)alter table database.table engine=innodb; (风险较小,临时整理)
小项目:批量修改zabbix引擎
select concat("alter table zabbix.",table_name," engine=tokudb") from information_schema.tables
where table_schema='zabbix';
5.InnoDB存储引擎物理存储结构
1.表空间(tablespace)
(1)MySQL5.5版本出现了共享表空间模式(移植Oracle的功能)
实现了较为方便的扩容功能,但是所有的表数据都集中在几个文件中,管理极其不方便
(2)MySQL5.6中,默认使用独立表空间模式实现存储。
保留了共享表空间,只用来存储系统相关数据(数据字典+undo+tmp表空间)
把用户表数据和索引单独存储(独立表空间)
(3)MySQL5.7
保留了共享表空间ibdata1,只用来存储系统相关的数据(数据字典+undo),undo在5.7 中 可以手工配置将他独立出来
(4)MySQL 8.0
保留了共享表空间ibdata1,只用来存储系统相关的数据(dw,cb)
undo自动独立出来,移除了数据字典的存储
浙公网安备 33010602011771号