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自动独立出来,移除了数据字典的存储

5.2

posted on 2019-12-24 15:24  杨港澳  阅读(59)  评论(0)    收藏  举报