关于Mysql的存储引擎Innodb和Myisam

数据结构

        MyIsam和InnoDB 都是采用 B+Tree这种数据结构来实现 B-Tree索引。而很大的区别在于,InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起,注意 InnoDB 只能聚集一个叶子页(16K)的记录(即聚集索引满足一定的范围的记录),因此包含相邻键值的记录可能会相距甚远。

        MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。同时Innodb的次索引指向对主键的引用,Myisam的次索引和主索引都指向物理

Innodb与Myisam应用场景

       因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM是最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。 
两种类型都有自己优缺点,选择那个完全要看自己的实际类弄。

聚簇索引对于那些经常要搜索范围值的列特别有效(因为实际数据的存储顺序就是按照聚簇索引排列存储的cuiyaonan2000@163.com)。

使用聚簇索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。

同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚簇(物理排序),避免每次查询该列时都进行排序,从而节省成本。----因为聚簇索引是数据的排列方式,所以一个表中只能有一个聚簇索引.

InnoDB索引和MyISAM索引的区别

存储结构(主索引/辅助索引)

  1. InnoDB的数据文件本身就是主索引文件。而MyISAM的主索引和数据是分开的。
  2. InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。
  3. innoDB是聚簇索引,数据挂在逐渐索引之下。

 锁

  1. MyISAM使用的是表锁
  2. InnoDB使用行锁

 事务

  1. MyISAM没有事务支持和MVCC
  2. InnoDB支持事务和MVCC

全文索引

  1. MyISAM支持FULLTEXT类型的全文索引
  2. InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好

主键

  1. MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址
  2. InnoDB如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值

外键

  1.  MyISAM不支持
  2. InnoDB支持

索引分类

聚集索引(聚簇索引)

聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引。

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。术语“聚簇”表示数据行和相邻的键值紧凑的存储在一起。

非聚集索引

非聚集索引: 索引顺序与物理存储顺序不同

稠密索引

稠密索引:每个索引键值都对应有一个索引项,稠密索引为数据记录文件的每一条记录都设一个键-指针对,如此每一个稠密索引关联到一个记录,或者说每个记录都会对应一个稠密索引. 如此可以了解到稠密索引是非聚集索引的一类.

稀疏索引

稀疏索引:相对于稠密索引,稀疏索引只为某些搜索码值建立索引记录;----即并不是为所有的记录都创建一个洗漱索引

也就是说,稀疏索引为数据记录文件的每个存储块设一个键-指针对,存储块意味着块内存储单元连续。--------也就是说稀疏索引只为一个连续的存储块中的最大或者最小的记录创建稀疏索引.如此这般通过找到最小或者最大的记录来遍历比它大或者比它小的记录 来获取到指定的记录cuiyaonan2000@163.com

稀疏索引相比于稠密索引的优点是:它所占空间更小,且插入和删除时的维护开销也小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值