这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
前言
说到MySQL我的第一印象就是开源免费,支持事务,这些确实是MySQL数据库的优势所在,但是支持事务的只是InnoDB引擎,那么那些别的引擎存在的意义又是什么?
InnoDB引擎
InnoDB的事务特性
- 支持事务
- 默认使用行级锁
- 具备良好的高并发特性
锁的概念
当一个线程占用某个资源的时候可以视为在这个资源上加了一把锁,其它线程想要访问的时候会被锁拦截,等第一个线程完成后交出锁,其它线程再去获取锁,然后才可以进行访问.
职责 | 粒度划分 |
---|---|
共享锁(读锁) | 行级锁 |
独占锁(排它锁/写锁) | 表级锁 |
注意: 虽然说
InnoDB
默认使用行级锁,但是我们需要注意的是只有利用索引的更新,删除操作,才会使用行级锁,而不能使用索引的写操作则是用的表锁
在实际开发中,一定要确保
updae/delete
语句的条件,要能够使用索引,否则就会锁表,程序不具备并发性。
InnoDB的适用场景
InnoDB
存储引擎适用于绝大多数场景MySQL5.7
以后InnoDB
也支持全文索引与空间函数MySQL5.5
版本以前默认MylSAM
MyISAM引擎
MyISAM特点
- 不支持事务
- 支持全文检索 支持text支持前缀索引
- 支持数据压缩
- 紧密存储,顺序读性能很好(存储空间连续)
- 表级锁,混合读写性能不高,并发性差
应用场景
- 非事务应用 例如保存日志
- 只读类应用,例如报表数据,字典数据
- 空间类应用,开发GIS系统(5.7版本之前)只有MylSAM可以调用空间函数
- 系统临时表,
sql
查询,分组的临时表引擎
注意: 使用时要注意不涉及到事务数据的处理
Memory引擎
Memory特点
- 不支持事务
- 内存读写,临时存储
- 超高读写效率,比
MyISAM
高一个量级- 表级锁,并发性差
应用场景
- 读多写少的静态数据例如省市县的对照表
- 充当缓存使用,保存高频访问静态数据
- 系统临时表
关键参数
- 设置
max_heap_table_size
控制内存表大小(字节)- 设置
tem_table_size
设置内存临时表最大值(字节) 使用下面命令查看
-- 查看内存参数设置
show variables like '%HEAP%'
复制代码
默认大小16M 设置大小
-- 查看内存参数设置
SET GLOBAL max_heap_table_size = 2147483648
复制代码
注意:
SET GLOBAL
命令设置 重启失效- 真正的修改需要修改配置文件
#vi /etc/my.cnf
#[mysqld]
#max_heap_table_size = 2048M
复制代码
设置临时表最大长度
SET GLOBAL tmp_table_size = 2147483648
复制代码
注意: 当前设置在新的连接中才会生效
CSV存储引擎
CSV特点
- 纯文本保存
- 不支持事务
- 不支持索引
应用场景
- 数据交换/数据迁移
- 不依赖
MySQL
环境