mysql存储引擎
存储引擎:
负责数据、日志的存储的管理
mysql中最主要使用的是myisam(5.5以前默认)、innodb(5.5.以后默认)
MyISAM:
MyISAM存储引擎特点:
- 不支持事务
- 表级锁定
- 读写相互阻塞,写时不能读,读时不能写
- 只缓存索引
- 不支持外键约束
- 不支持聚簇索引
- 读取数据较快,占用资源较少
- 不支持MVCC(多版本并发控制机制)高并发
- 崩溃恢复性较差
- MySQL5.5.5前默认的数据库引擎
MyISAM存储引擎适用场景
- 只读(或者写较少)
- 表较小(可以接受长时间进行修复操作)
MyISAM引擎文件
- tbl_name.frm 表格式、结构定义
- tbl_name.MYD 数据文件
- tbl_name.MYI 索引文件
InnoDB:
InnoDB存储引擎特点:
- 行级锁
- 支持事务,适合处理大量短期事务
- 读写阻塞与事务隔离级别相关
- 可缓存数据和索引
- 支持聚簇索引
- 崩溃恢复性更好
- 支持MVCC高并发
- 从MySQL5.5后支持全文索引
- 从MySQL5.5.5开始为默认的数据库引擎
InnoDB数据库文件
- row 行。数据存储的最小单元
- page 页,用于存放row的的,一页默认16k大小
- extent 盘区,用于存放页的,一般存 64页
- segment 段,用于存放extent的
- tablespace 表空间,也就是磁盘上的文件,存放segment的
5.5版本以下mysql的innodb:
所有InnoDB表的数据和索引放置于同一个表空间中
数据文件:
- ibdata1, ibdata2 , 存放在datadir定义的目录下
- tb_name.frm , 表格式定义,存放在datadir定义的每个数据库对应的目录下
5.5以上版本mysql的innodb:
每个表单独使用一个表空间存储表的数据和索引
两类文件放在对应每个数据库独立目录中:
- tb_name.ibd 数据文件(存储数据和索引)
- tb_name.frm 表格式定义
启用innodb:
#查看是否开启,5.5以下默认off,以上默认on
show variables like 'innodb_file_per_table';
#临时开启
set global innodb_file_per_table='ON';
#永久开启
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
innodb_file_per_table=1
myisam和innodb的差别:
- myisam不支持集群索引,innodb支持
- myisam不支持数据缓存,innodb支持
- myisam不支持外键,innodb支持
- myisam不支持全文索引,innodb支持
- myisam只支持表级别锁,innodb支持行级别锁
- myisam不支持mvcc机制,innodb支持。此机制为:
每个表创建时,会有两个隐藏字段创建,分别是insert、delect。前者是一条数据插入时,会有一个记录数值记录在对应的插入那行的insert字段,删除同理。所以方便了数据找回、多人同时访问数据
- innodb只支持64T存储空间,myisam支持256TB
- myisam不支持事务机制,innodb支持。用来保障数据一致性的,事务是:
一个或多个动作组合而成,进行时必须是全部都要完成,不能只做一半。要么都做,要么不做
其它存储引擎:
| Performance_Schema | Performance_Schema数据库使用 |
| Memory | 将所有数据存储在RAM中,以便在需要快速查找参考和其他类似数据的环境中进行快速访问。适用存放临时数据。引擎以前被称为HEAP引擎 |
| MRG_MyISAM | 使MySQL DBA或开发人员能够对一系列相同的MyISAM表进行逻辑分组,并将它们作为一个对象引用。适用于VLDB(Very Large Data Base)环境,如数据仓库 |
| Archive | 为存储和检索大量很少参考的存档或安全审核信息,只支持SELECT和INSERT操作;支持行级锁和专用缓存区 |
| Federated联合 | 用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取,提供链接单独MySQL服务器的能力,以便从多个物理服务器创建一个逻辑数据库。非常适合分布式或数据集市环境 |
| BDB | 分布式使用。可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性 |
| Cluster/NDB | 分布式使用。MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性 |
| CSV | 使用逗号分隔值格式将数据存储在文本文件中。存文本的。可以使用CSV引擎以CSV格式导入和导出其他软件和应用程序之间的数据交换 |
| BLACKHOLE | 黑洞存储引擎接受但不存储数据,检索总是返回一个空集。该功能可用于分布式数据库设计,数据自动复制,但不是本地存储 |
| example | “stub”引擎,它什么都不做。可以使用此引擎创建表,但不能将数据存储在其中或从中检索。目的是作为例子来说明如何开始编写新的存储引擎 |
管理存储引擎:
show engines; 查看支持的存储引擎
show variables like '%storage_engine%'; 查看当前默认使用的
show table status from db_name; 当前所有表的存储引擎
show table status like 'tb_name'; 查看指定表
show create table tb_name; 查看指定表
设置表的存储引擎:
CREATE TABLE tb_name(字段... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;
设置默认的存储引擎:
vim /etc/my.cnf
[mysqld]
default_storage_engine= InnoDB

浙公网安备 33010602011771号