数据库 - Mysql - Mysql 存储引擎及索引技术

MyISAM是MySQL 5.5之前版本默认的存储引擎,从5.5之后,InnoDB开始成为MySQL默认的存储引擎。

MyISAM 使用B Tree实现主键索引、唯一索引和非主键索引。

InnoDB 中非主键索引使用的仍是B Tree数据结构,而主键索引使用的是B+Tree。

一般文件系统采用的是B Tree

 

索引为什么选用B树这种数据结构?

 

一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。这样的话,索引查找过程中就要产生磁盘I/O的消耗,所以评价一个索引的优劣的重要指标就是I/O的操作次数。

I/O的操作次数与数的高度有关。数的高度O(h)=O(logdN)。由此可见d越大索引的性能就越好。相对于B-Tree而言,B+Tree内节点去掉了data域,因此可以拥有更大出度,故使用B+Tree。 

因为使用B树查找时,所用的磁盘IO操作次数比平衡二叉树更少,效率也更高。 
为什么使用B树查找所用的磁盘IO操作次数比平衡二叉树更少? 

 

大规模数据存储中,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的高度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。那么我们就需要减少树的高度以提高查找效率。而平衡多路查找树结构B树就满足这样的要求。B树的各种操作能使B树保持较低的高度,从而达到有效减少磁盘IO操作次数。

 

 

MySQL索引实现

MySQL中,索引属于存储引擎级别的概念,不同的存储索引对索引的实现方式是不同的。

MyISAM索引实现

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。

 

 

 

l  MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引在结构上没有区别。

l  MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。

InnoDB索引实现

InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同

 

1)        MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。

InnoDB的数据文件本身就是索引文件,即数据文件本身就是按B+Tree组织的一个索引结构,叶子节点data保存了完整的数据记录。

2)        InnoDB的辅助索引data域存储相应记录主键的值而不是地址。

聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值