MySQL优化学习 | 存储引擎

MySQL优化学习 | 存储引擎

这是我参与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%'
复制代码

image.png

默认大小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特点

  • 纯文本保存
  • 不支持事务
  • 不支持索引

应用场景

  • 数据交换/数据迁移

image.png

  • 不依赖MySQL环境

image.png

分类:
后端
标签: