MyISAM

mysql5.5之前版本默认存储引擎

  1. MyISAM存储引擎由MYD(数据存储文件扩展名字)和MYI(索引文件扩展名)组成

    所有存储引擎都有 frm文件用来存储表结构

  2. 特性

    • 并发性

      读写并发不是太好,只读的话还好

    • 锁级别是表级

    • 不支持事务处理

      check table 表名;repaire table 表名;(修改记得关闭服务)

    • 支持全文索引、支持数据压缩

      压缩命令:myisampa

  3. 限制

    • mysql版本<5.0默认表大小为4G

      如存储大表则要修改max_rows和avg_row_length

    • mysql版本>5.0单表大小256tb

  4. 使用场景

    • 非事务型应用
    • 因为可以压缩表,适用于只读类应用
    • 空间类应用

innodb(支持事务处理)

mysql版本5.5之后默认存储引擎

如何选择”系统表空间”和“独立表空间”

innodb_file_per_table参数为true则为独立表空间结构,否则为系统表空间结构,mysql5.6之后默认是true;

  • 比较:

    • 系统表空间无法简单的收缩文件大小
    • 独立表空间可以通过“optimize table”命令收缩系统文件
      -系统表空间会产生io瓶颈

      因为只有一个文件,当同时对多个表操作时,处理速度慢

  • 系统表空间转换成独立表空间步骤:

    1. 使用mysqldump导出所有数据,包括存储过程等
    2. 停止mysql服务,修改参数,并删除innodb相关文件

      重新建立一个data目录,使用mysql install innpdb脚本初始化就可以了

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

    4. 重新导入数据

特性:

  • innodb数据字典信息

    包括:表列索引外键等

  • undo 回滚段

  • 事务处理

    ACID

    • 原子性
    • 一致性
    • 隔离性
    • 持久性
  • redo log(存储已经提交的事务) 和 undo log(存储未经提交的事务)缓存区

  • 支持行级锁

    锁:管理共享资源的并发访问,用于实现事务的隔离性

    锁类型:

    1. 共享锁(读锁)、独占锁

    | |读锁 | 写锁
    ——|—-|—-
    写锁|不兼容|不兼容
    读锁|不兼容|兼容

    锁的粒度:行级、列级、表级

    阻塞和死锁是不一样的,死锁是多个事务互相占用了对方资源,少量死锁系统可以处理,大量死锁就要留意了。

  • 行级锁可以最大程度的支持并发(存储引擎层实现的)

  • innodb状态检查:

    1. show engine innodb status

使用场景:

  • 大多数oltp应用

其他存储引擎

csv、archive、memory、federated

您的支持是对我最大的鼓励!

分类: MySQL

标签: