这一篇博客主要用来记录mysql数据库的存储引擎的基本属性与相关参数
1. 部分命令
使用show engines;显示安装以后可用的存储引擎和默认引擎。 以下为博主自己的mysql服务器的村粗引擎状态
其中InnoDB为默认引擎支持事务 博主mysql版本为5.7 5.5(包括5.5)以上InnoDB则为默认的存储引擎
列Support值为No时表示没有安装对应引擎
也可以使用 show variables like 'storage_engine' 查询当前默认的存储引擎
如何安装? 只需要三部则可以完成
1. 找到mysql服务器安装目录 若不知道 可以执行 show VARIABLES LIKE 'datadir' 该命令是查询启动参数datadir的值是多少
2. 进入目录找到my.ini 查看是否有对应存储引擎名称大小写不敏感 若没有则添加 如 federated=1 1为开启 0为关闭
3. 重启mysql服务即可
现在开始讲解不同存储引擎的特性
1. innoDB
首先创建一个使用innoDB作为存储引擎的表
create table my_innodb(
id int(8) not null,
primary key(id)
)engine innodb 设置存储引擎为innodb
特性:
a. innoDB是一种事务性存储引擎
b. 完全支持事务的ACID特性
c. 锁的级别为行级锁 所以对高并发的写操作拥有较好的支持
存储文件:
在这里统一讲解一下存储文件,mysql在系统中扮演着持久层的一个角色,所以其数据最终是落地在硬盘上的 根据不同 的存储引擎有着不同的存储方式 如何找到每个表对应的文件呢 还记得 show variables like 'datadir'命令吗? 使用该 命令进入数据目录后 找到对应的数据库目录则会有对应表名的文件
现在我们看看刚才创建表的存储文件
其中.frm后缀的文件是所有存储引擎都有的 保存的是表的结构如属性等 .ibd后缀的则为数据与索引的存储文件
另外innoDB存储文件的方式有两种 1系统表空间 2独立表空间 默认为独立表空间
现在我们就来试试设置为系统表空间后的存储文件
使用show variables like 'innodb_file_per_table' 查看当前innodb的表空间类型 值为on则表示独立表空间 off为系统 表空间 使用 set global innodb_file_per_table=off 将独立表空间设置为系统表空间
在创建一个新表 在这里我们使用 create table my_innodb_1 as select * from my_innodb where id = -1进行创建一 个新表 my_innodb_1 再使用同样的方式创建my_innodb_2 创建完毕后我们去查看一下存储文件发现 没有了ibd文件这 个时候咱们不要着急返回到上一层data目录
看这里是不是多出来新创建的ibd文件呢 注意重点来了我们创建了两个使用系统表空间的表 为什么 ibd文件只有一个呢 这就是系统表空间的核心所在了 所有的表都只使用一个数据文件
独立表空间 | 系统表空间 | |
IO | 可以同时向多个文件刷新数据 | 由于多个表是使用同一个数据文件所以会产生IO瓶颈 |
收缩文件大小 | 可以通过optimize table重新调整数据文件大小 再删除较大数据后使用 | 无法调整 |
2. MyISAM
先创建一个mySAM存储引擎的表
create table my_myisam(
id int(4),
nam VARCHAR(32) DEFAULT 'wugui',
PRIMARY KEY (id)
)engine myISAM
特性:
支持高并发的读取操作
支持全文检索
支持数据压缩
如何进行数据压缩呢? 这个需要再数据库服务器去操作对应的myisampack.exe程序 该程序再安装路径下/bin中 若不清楚安装路径可以使用命令 show variables like "character_sets_dir"; 进行对应的查看
进入bin目录下执行 myisampack -b -f "....../my_myisam.MYI" 双引号中为数据文件的绝对路径 这样便压缩了数据文件再一个数据较大并很少更新的表可以使用压缩
innodb | myisam | |
主外键 | 支持 | 不支持 |
事务 | 支持 | 不支持 |
缓存 | 缓存索引与真实数据 对内存要救较高 | 只缓存索引 |
表空间 | 大(索引与数据都是一个文件) | 小(索引与数据分开) |
关注点 | 事务 | 只读性能 |
是否默认安装 | 是 | 是 |
锁 | 行级锁 | 表级锁 |