mysql的各种存储引擎对比

一、存储引擎概述:

1.为什么要合理选择数据库存储引擎:

MySQL中的数据用各种不同的技术存储在文件中,这些技术中得到每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。

2.存储引擎的作用:

设计并创建数据库以保存系统所需的关系或XML文档;实现系统以访问和更改数据库中存储的数据;为单位或客户部署实现的系统;提供日常支持以优化数据库的性能。

二、MySQL的存储引擎

1.InnoDB

InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。

InnoDB引擎提供了对数据库ACID(原子性、一致性、独立性、持久性)事务的支持,并且实现sql标准的四种隔离级别,提供行级锁和外键约束,设计目标是处理大容量数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引,由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。

适用场景:经常更新的表,适合处理多重并发的更新请求;支持事务;可以从灾难中恢复;外键约束;支持自动增加列属性auto_increment。

2.MyIsam

MyIsam是mysql默认的引擎,没有提供对数据库事务的支持,也不支持行级锁和外键,当插入或更新时需要锁定整个表,效率会低一些。

适用场景:查询速度快,如果对表的读操作远远多于写操作且不要数据库事务的支持,myIsam也是很好的选择。

使用建议:

以下两点必须使用 InnoDB:

1)可靠性高或者要求事务处理,则使用InnoDB。这个是必须的。

2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定InnoDB数据引擎的创建。

对比之下,MyISAM的使用场景:

1)做很多count的计算的。如一些日志,调查的业务表。

2)插入修改不频繁,查询非常频繁的。

三、引擎原理

MyIASM引擎的索引结构:

MyISAM索引结构: MyISAM索引用的B+ tree来储存数据,MyISAM索引的指针指向的是键值的地址,地址存储的是数据。

B+Tree的数据域存储的内容为实际数据的地址,也就是说它的索引和实际的数据是分开的,只不过是用索引指向了实际的数据,这种索引就是所谓的非聚集索引。

因此,过程为: MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,根据data域的值去读取相应数据记录。

InnoDB引擎的索引结构:

也是B+Treee索引结构。Innodb的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据,这种索引就是聚集索引。这个索引的key就是数据表的主键,因此InnoDB表数据文件本身就是主索引。

InnoDB的辅助索引数据域存储的也是相应记录主键的值而不是地址,所以当以辅助索引查找时,会先根据辅助索引找到主键,再根据主键索引找到实际的数据。所以Innodb不建议使用过长的主键,否则会使辅助索引变得过大。

建议使用自增的字段作为主键,这样B+Tree的每一个结点都会被顺序的填满,而不会频繁的分裂调整,会有效的提升插入数据的效率。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值