MySQL_存储引擎介绍

此文章为Myth_Ghost原创作品。禁止转载!!!

MyISAM支持索引类型(系统表)

MyISAM表支持数据压缩

​ 如果数据写入表后,不需要更改,可以进行压缩操作。读取的时候可以逐行解压缩,不需要整个表解压。

myisampack -b -f xxxxx.MYI

压缩后不能进入写操作,只能读操作。

限制:

​ MySQL 5.0之前默认表大小为4G

​ 修改大表需要修改MAX_Rows和AVG_ROW_LENGTH。重新建表。

适用场景:

​ 非事务型应用

​ 数据仓库、报表

​ 只读类应用

​ 共享锁之间不会造成阻塞

​ 空间类应用

​ 支持空间函数

MySQL_Innodb优化

Innodb支持索引类型(支持在线热备)

Innodb使用表空间进行 数据存储

innodb_file_per_table

修改命令:

set global innodb_file_per_table = off;

on:独立表空间: tablename.ibd 为每一个表创建独立的表空间

​ 1.optimize table

​ 2.适合频繁写入

off:系统表空间: ibdataX

​ 1.磁盘碎片

​ 系统表空间不断增长,删除后不会释放空间。热备份方式:把所有数据库中Innodb表导出后,删除innodb相关的表空间文件后,再重启mysql服务器,进行表结构的重建,导入数据。

​ 2.不适合频繁写入

表转移的步骤

​ 1.使用mysqldump导出

​ 2.停止mysql服务,修改参数,删除innodb

​ 3.重启Mysql服务,重建innodb系统表空间

​ 4.重新导入数据

锁的类型

​ 共享锁(读锁)相互不会被阻塞

​ 独占锁(写锁)

锁的粒度

​ 表级锁 MySQL服务器实现

​ 行级锁 InnoDB实现

阻塞和死锁

​ 阻塞

​ 死锁 少量死锁系统可以自动处理

常用存储引擎

csv 文件系统存储

​ 数据以文本方式存储在文件中

特点:

  • 以CSV格式进行数据存储
  • 所有列必须不为NULL
  • 不支持索引
    • 不适合大表,不适合在线处理
  • 可以对数据文件直接编辑
    • 保存文本内容

适用场景:

  • 适合作为数据交换的中间表

Archive存储引擎

特点:

  • 以zilib对表数据进行压缩,磁盘I/O更少,占用空间小
  • 数据存储在ARZ为后缀的文件中
  • 只支持insert和select操作
  • 只允许在自增ID列增加索引

适用场景:

  • 日志和数据采集类应用

Memory存储引擎

特点:

  • 也称为HEAP存储引擎,所以数据保存在内存中。表结构在硬盘中,数据(索引和数据)在内存中。
  • 支持HASH索引(适合等值查找)和BTree索引(适合范围查找)
  • 所有字段固定长度 varchar(10) = char(10)
  • 不支持BLOG和TEXT等大字段类型
  • 表级锁
  • 表的最大大小由max_heap_table_size参数决定。默认16MB,需要先设定

易混淆概念:

  • Memory存储引擎表
  • 临时表(只对当前Session表可见)
    • 系统使用临时表(内部临时表)
      • 超过限制使用MyISAM临时表
      • 未超过限制使用Memory表
    • create temporary table 建立的临时表

适用场景:(主Memory从Innodb数据库搭配使用时,主数据库重启,从数据库也会被重建。)

  • 用于查找或者是映射表,例如邮编地区的对应表
  • 用于保存数据分析中产生的中间表
  • 用于缓存周期性聚合数据的结果表

Federated存储引擎(默认禁止)

特点:

  • 提供了访问远程MySQL服务器上表的方法
  • 本地不存储数据,数据全部放到远程服务器上
  • 本地需要保存表结构和远程服务器的连接信息

适用场景:

  • 偶尔的统计分析及手工查询

你可能感兴趣的:(MySQL)