MyISAM索引

      MyISAM的数据文件和索引文件是分开存储的。MyISAM使用B+树构建索引树时,叶子节点中存储的 键值为索引列的值,数据为索引所在行的磁盘地址。

主键索引

        

等值查询数据

select * from t_user_myisam where id=30;

        1. 先在主键树中从根节点开始检索,将根节点加载到内存,比较30<56,走左路。(

1次磁盘IO)

        2. 将左子树节点加载到内存中,比较20<30<49,向下检索。(1次磁盘IO)

        3. 检索到叶节点,将节点加载到内存中遍历,比较20<30,30=30。查找到值等于30的索引项。(1 次磁盘IO)

        4. 从索引项中获取磁盘地址,然后到数据文件t_user_myisam.MYD中获取对应整行记录。(

1次磁盘 IO)

        5. 将记录返给客户端。         

        磁盘IO次数:3+1次。

范围查询数据

select * from t_user_myisam where id between 30 and 49

        1. 先在主键树中从根节点开始检索,将根节点加载到内存,比较30<56,走左路。(1次磁盘IO)

        2. 将左子树节点加载到内存中,比较20<30<49,向下检索。(1次磁盘IO)

        3. 检索到叶节点,将节点加载到内存中遍历比较20<30,30<=30<49。查找到值等于30的索引项。 根据磁盘地址从数据文件中获取行记录缓存到结果集中。(2次磁盘IO) 我们的查询语句时范围查找,需要向后遍历底层叶子链表,直至到达最后一个不满足筛选条件。

        4. 向后遍历底层叶子链表,将下一个节点加载到内存中,遍历比较,30<49<=49,根据磁盘地址从 数据文件中获取行记录缓存到结果集中。(2次磁盘IO)

        5. 最后得到两条符合筛选条件,将查询结果集返给客户端。

        磁盘IO次数:2+检索叶子节点数量+记录数

辅助索引    

        在 MyISAM 中,辅助索引和主键索引的结构是一样的,没有任何区别,叶子节点的数据存储的都是行 记录的磁盘地址。只是主键索引的键值是唯一的,而辅助索引的键值可以重复。

        查询数据时,由于辅助索引的键值不唯一,可能存在多个拥有相同的记录,所以即使是等值查询,也需要按照范围查询的方式在辅助索引树中检索数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值