MySQL存储引擎汇总

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-01-09 07:56 被阅读0次

    上一篇 <<<查询和更新sql语句执行原理
    下一篇 >>>


    常用存储引擎

    InnoDB、MyISAM、阿里云的压缩存储引擎TokuDB、MEMORY、CSV

    特点 Myisam InnoDB BDB Memory Archive
    批量插入的速度 非常高
    事务安全 支持 支持
    全文索引 支持
    锁机制 表锁 行锁 页锁 表锁 行锁
    存储限制 没有 64TB 没有 没有
    B树索引 支持 支持 支持 支持
    哈希索引 支持 支持
    集群索引 支持
    数据缓存 支持 支持
    索引缓存 支持 支持 支持
    数据可压缩 支持 支持
    空间使用 N/A 非常低
    内存时间 中等
    支持外键 支持

    1、CSV存储引起

    数据存储以CSV文件
    特点:
    a.没有索引
    b.列定义必须为NOT NULL
    c.不能设置自增列 -->不适用大表或者数据的在线处理
    d.CSV数据的存储用","隔开
    e.可直接编辑CSV文件进行数据的编排 -->数据安全性低
    f.用vi或文本编辑器编辑之后,要生效使用flush table XXX 命令
    应用场景: 数据的快速导出导入 表格直接转换成CSV

    2、Archive存储引擎

    压缩协议进行数据的存储,数据存储为ARZ文件格式
    特点: 只支持insert和select两种操作 只允许自增ID列建立索引 行级锁 不支持事务 数据占用磁盘少(较其他存储引擎小的多,基本1:8-1:9的比例)
    应用场景:日志系统 大量的设备数据采集

    3、Memory(heap)存储引擎

    数据都是存储在内存中,IO效率要比其他引擎高很多 服务重启数据丢失,内存数据表默认只有16M。
    一般不会在生产上使用memory存储引擎。但是他是临时表默认的存储引擎。
    特点: 支持hash索引,B tree索引,默认hash(查找复杂度0(1)) 字段长度都是固定长度varchar(32)=char(32) 不支持大数据存储类型字段如 blog,text(如果超过的话,会选择myisam引擎)
    应用场景: 等值查找热度较高数据 查询结果内存中的计算,大多数都是采用这种存储引擎 作为临时表存储需计算的数据

    4、Myisam存储引擎(MySQL8.0被废弃掉了)

    Mysql5.5版本之前的默认存储引擎,但MySQL8已废除
    特点: a、select count(*) from table 无需进行数据的扫描,他有一个专门计算数据的函数,InnoDB需要一行行的扫描,计算出来。
    b、数据(MYD)和索引(MYI)分开存储
    c、表级锁
    d、不支持事务


    数据和索引分别存储,不管用哪个存储引擎,都会生成一个.frm文件(表定义文件),数据保存在myd文件,索引保存在myi文件里面。在myisam里面,叶子节点的数据区保存的是.myd的内存地址,在.myi通过索引找到这条数据的内存地址,再通过这个地址去.myd里面找到对应的数据。

    5、InnoDB存储引擎(MySQL默认引擎)

    Mysql5.5及以后版本的默认存储引擎.
    特点:
    a.事务ACID
    b.行级锁
    c.聚集索引(主键索引)方式进行数据存储
    d.支持外键关系保证数据完整性(不常用)


    只有.ibd和.frm两个文件,他的index和数据放在了一起,在InnoDB中,以主键为索引来组织数据的存储,如果没有明确指定一个主键(ID)索引,他会默认的生成一个隐藏的6byte的Int型的索引来作为他的主键索引,只是这个隐式的索引看不到而已。
    注意:MySQL每个版本都是略微差异,比如在MySQL5.7之前都有.frm文件,而在mysql8.0之后就将该文件移除掉了。

    InnoDB与MYISAM的区别:
    1.InnoDB支持事务(TRANSACTION),支持行级锁,但可能会发生死锁
    2、Myisam使用表锁,没有事务,不带条件的统计count 比InnoDB统计count效率高

    相关文章

      网友评论

        本文标题:MySQL存储引擎汇总

        本文链接:https://www.haomeiwen.com/subject/qbqgnktx.html