MYSQL存储引擎

存储引擎

​ 存储引擎决定了数据如何存放,用什么格式文件存放,文件存放在哪里。mysql 支持多种存储引擎,常用的有innodbmyisammemory
memory相当于内存级数据库,把数据都放到内存中,性能很高,但是无法持久化,掉电易失。
innodb是最常用,也是默认使用的存储引擎。

InnoDB与MyISAM差异

​ 两者差异点很多,下面依次罗列:

  1. 事务和外键
    InnoDB支持事务和外键;MyISAM都不支持。
  2. 全文索引
    MyISAM支持全文索引;InnoDB从5.7开始才支持全文索引。

  3. MyISAM是表级锁;InnoDB默认是行级锁,当用不到索引时会变成表级锁,因为InnoDB锁的是索引。
  4. 存储
    MyISAM用到的存储文件后缀为.MYI.MYD,分别保存索引和数据;InnoDB中用.ibd文件存储索引和数据。
  5. 索引
    MyISAM是非聚簇索引;InnoDB是聚簇索引。
  6. B+树
    两者索引的底层数据结构都是B+树,MyISAM中叶子节点存储的是整行数据的地址;InnoDB中叶子节点存储的是整行数据。
  7. 回表
    MyISAM索引B+树中存储的是行数据地址,因此即使是辅助索引,也可以根据地址直接找到行数据,因此不存在回表;InnoDB中辅助索引叶子节点为了节约空间,存储的是主键索引值而非整行数据,因此存在回表操作。
  8. 并发
    MyISAM读写互斥阻塞,通过配置可实现读和插入并发;InnoDB读写阻塞情况与事务隔离级别有关。
  9. 场景选择
    MyISAM适合大量读、并发不高的场景;InnoDB适合大量更新、并发较高的场景。
InnoDBMyISAM
索引类型聚簇索引非聚簇索引
回表存在不存在
支持事务
支持表锁
支持行锁
支持外键
支持全文索引是(5.7开始支持)
适合操作类型大量 insert、delete、update大量 select

为什么MyISAM读比InnoDB快

InnoDB在做SELECT的时候,要维护的东西比MYISAM引擎多很多:

  1. InnoDB 要缓存数据和索引;MyISAM只缓存索引块,这中间还有换进换出的减少
  2. InnoDB 寻址要映射到块,再到行;MyISAM记录的直接是文件的OFFSET,定位比InnoDB要快(不确定)
  3. InnoDB 还需要维护MVCC一致;MyISAM完全没这东西
  4. InnoDB 在使用辅助索引时需要进行回表;MyISAM无需回表便可直接获取行数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值