MySQL 使用的是 Btree 索引,那它是怎么加速检索的呢?

检索中主要耗时在于内存与磁盘的IO耗时,所以加速的关键在于减少IO的次数。

图中是一颗 b 树,每个磁盘块包含几个数据项和指针,

如磁盘块 1 包含数据项 17 和 35,包含指针 P1、P2、P3,

P1指向包含数据项小于17的磁盘块,P2指向数据项在17和35之间的磁盘块,P3 指向数据项大于35的磁盘块。

真实的数据存在于叶子节点,即 3、5、9、10、13、15、28、29、36、60、75、79、90、99。

非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,如 17、35 并不真实存在于数据表中。

【查找过程】 以查找数据项29为例

  1. 首先会把磁盘块 1 由磁盘加载到内存,此时发生一次 IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的 P2指针,相比磁盘的 IO,内存时间非常短可以忽略不计。
  2. 通过磁盘块 1的 P2 指针的磁盘地址把磁盘块 3 由磁盘加载到内存,发生第二次 IO,29 在 26 和 30 之间,同理锁定磁盘块 3 的 P2 指针。
  3. 通过指针加载磁盘块 8 到内存,发生第三次 IO,同时内存中做二分查找找到了数据项 29,结束查询,总计三次 IO。

真实的情况中,3 层的树可以表示上百万的数据,上百万的数据查找只需要三次 IO,性能提高是巨大的,速度自然很快。相反如果没有索引,那就要遍历所有数据,最差情况下每个数据项都要发生一次 IO,那么总共需要百万次的 IO,速度自然很慢。

Mysql使用索引为什么会变快?相关推荐

  1. 面试官:为啥加了索引查询会变快?

    面试官:你在工作中有遇到SQL查询比较慢的情况吗? 果子:有的.随着业务的发展,表中的数据量会越来越大,查询就会越来越慢 面试官:那你是如何优化查询慢的问题? 果子:在需要查询的列上加索引 面试官:那 ...

  2. Mysql 建立索引之后反而变慢(已解决)

    Mysql 建立索引之后反而变慢(已解决) 记录一个神奇的问题,解决方法分享给大家,碰到类似问题,可以试试这种方法. SQL查询背景 需要优化建索引的表为 FEDERATED 引擎(远程表) 数据库1 ...

  3. mysql添加索引反而速度变慢

    索引失效几种情况 1.使用in.not in,会导致索引失效 失效的原因和 Mysql 的版本以及表中的数据量有关系,在 8.0 之后的版本是走索引的 2.or 分割的条件,如果 or 左边的条件存在 ...

  4. 为什么用了索引之后,查询就会变快?

    来自:会点代码的大叔 =致力于用大白话讲解复杂的技术= 本期问题 QUESTION 为什么用了索引之后,查询就会变快? 相信很多程序员朋友对数据的索引并不陌生,最常见的索引是 B+ Tree 索引,索 ...

  5. 为什么索引可以让查询变快,你有思考过吗?

    作者 | topEngineerray 来源 | https://blog.csdn.net/topdeveloperr/article/details/88742503 概述 人类存储信息的发展历程 ...

  6. mysql数据库索引页号为什么从3开始_MySQL数据库快问快答

    原标题:MySQL数据库快问快答 前言 今天楼主给大家列一下关于数据库几个常见问题的要点,如果大家对其中的问题感兴趣,可以自行扩展研究. 1. UNION ALL 与 UNION 的区别 UNION和 ...

  7. mysql索引使增删变慢_mysql优化(四)–索引

    http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 一. 四种索引类型: 主键索引,唯一索引,全文索引,普通索引 二.  为什 ...

  8. 面试官 | 为什么用了索引之后,查询就会变快?

    为什么用了索引之后,查询就会变快? 相信很多程序员朋友对数据的索引并不陌生,最常见的索引是 B+ Tree 索引,索引可以加快数据库的检索速度,但是会降低新增.修改.删除操作的速度,一些错误的写法会导 ...

  9. mysql索引使增删变慢_mysql优化之索引篇

    mysql,对it打工人,这个几乎是必备的技能之一.mysql可以解决我们平时工作中的大量的.有关增删查改的问题.所以想深入了解mysql,我觉得关键在于他的增删查改背后的算法,开搞. 面对增删查改等 ...

最新文章

  1. 无法消除恐惧?Nature发现肠道菌与大脑间更多的神秘联系...
  2. python终端中退格键,方向键不能使用
  3. 可以伸缩的查询面板 (searchBar)
  4. FZOJ2110: Star
  5. append和extend区别
  6. caffe的googlenet模型使用
  7. 规则引擎实现生产调度系统
  8. php钓鱼网站怎么做视频教程,反黑钓鱼网站全过程
  9. Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
  10. 游戏服务器背包设计与开发
  11. HDFS中NameNode和Secondary NameNode
  12. 拖欠银行贷款的后果有哪些
  13. 微信weixin://xxx 分析
  14. 微信小程序傻瓜制作_微信小程序模板制作:手把手教你做一个生鲜小程序
  15. 如何从第三方应用下载广播电台的缓存节目内容
  16. Unity中Destory销毁对象不是立即销毁
  17. Oracle 实验六:PL/SQL编程基础(1)
  18. IDEA—Maven项目JDK版本设置
  19. 数学分析教程(科大)——1.4笔记+习题
  20. 人工智能--自动编码器

热门文章

  1. 魔枪士未转职刷图视频
  2. Avellaneda Stoikov’s market-making strategy AS模型的通俗理解篇(二)
  3. python画小猪乔治_小猪佩奇怎样画
  4. SQL 语句大全(1)
  5. 2019写给对象的话_恋爱中写给对象看的说说 2019最流行的情侣间情话真实浪漫
  6. 计算机软件档案资料员难做吗,资料员:做资料很难吗?
  7. android 4.4 art模式,从未如此流畅 Android 4.4 ART模式体验
  8. php微信推文大图,微信公众号图文排版?看这一篇就够了
  9. 校园分期市场的机遇与风险
  10. 面试前必备的 JavaScript 基础知识梳理总结