Mysql的存储引擎


四种存储引擎

 

存储引擎:数据库底层软件组织,以插件的形式运行,数据库管理系统(DBMS)使用存储引擎进行增删查改数据的操作,不同的存储引擎提供不同的存储机制、索引技巧、锁功能等。同一个数据库中不同的表可以选择不同的存储引擎

聚集索引:索引和数据存在同一个文件里;  非聚集索引:索引和数据文件分开存储的索引 
 

一、InnoDB

      1. 支持事务(损失了一定效率),默认隔离级别是RR可重复读,高并发场景优选
      2. B+树结构,聚集索引(数据按照主键来组织.如果没有指定主键,会默认生成一个6字节的RowId做主键)。frm文件存表结构,IBD文件存数据和索引
      3. 锁粒度为行级锁定,可以支持更高的并发
      4. 有缓存:通过缓冲池,将索引和数据全部缓存起来,加快查询的速度
      5. 支持外键完整性约束(比如业务线表设置bu表作为外键,业务线还有时,不能删除关联的bu(完整性),不过一般不建议用,增加了耦合度,不方便维护)
      6. 配合一些热备工具可以支持在线热备份

      7.B+树结构,聚集索引的搜索:存储的时候按照主键做排序存储,叶子节点存每行的真实数据;非主键索引会维护一个类似MyISAM的索引结构:叶子节点存索引和在聚集索引中对应的地址;   所以:按主键进行搜索十分高效,按辅助索引搜索时会检索两遍。

二、MyISAM

      1. MYSQL5.5之前的默认存储引擎,不支持事务,不支持外键
      2. B+树结构,非聚集索引:myi文件存索引(非叶子节点仅保存索引,叶子节点保存索引和指向数据记录的指针地址);myd文件存数据;frm文件存表结构定义
      3. 默认的锁粒度为表级锁,并发性能差
      4. 插入和读取数据快,空间和内存使用较低,对并发性、完整性要求较低的可以使用

三、MEMORY存储引擎

      1. 数据都在内存中(类似redis),表不能太大,处理速度快但是安全性不高(服务出现故障数据丢失)
      2. 支持的数据类型有限;默认使用哈希索引
      3. 锁粒度为表级锁,访问量大时效率慢

四、MyISAM和InnoDB的区别

      1. 事务支持:InnoDB可以,MyISAM不行
      2. 外键支持:InnoDB可以,MyISAM不行
      3. 锁的粒度:MyISAM表级锁,InnoDB行级锁(支持更高的并发,但是锁开销也更大,需要对每一行加锁)
      4. 备份容灾:InnoDB支持在线热备份
      5. 性能对比:MyISAM查询和写入效率高于InnoDB(I需要维护数据缓存,M直接定位到内存地址)
      6. 存储结构:是否聚集索引,MyISAM(否,frm + MYI + MYD), InnoDB(是,frm + ibd)
      7. InnoDB会占用更多的磁盘空间来存储数据和索引

五、如何选择合适的存储引擎

      是否需要支持事务、并发高不高、是否需要热备份、是否需要外键等方面综合考虑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值