Mysql使用索引为什么会变快?
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 由磁盘加载到内存,此时发生一次 IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的 P2指针,相比磁盘的 IO,内存时间非常短可以忽略不计。
- 通过磁盘块 1的 P2 指针的磁盘地址把磁盘块 3 由磁盘加载到内存,发生第二次 IO,29 在 26 和 30 之间,同理锁定磁盘块 3 的 P2 指针。
- 通过指针加载磁盘块 8 到内存,发生第三次 IO,同时内存中做二分查找找到了数据项 29,结束查询,总计三次 IO。
真实的情况中,3 层的树可以表示上百万的数据,上百万的数据查找只需要三次 IO,性能提高是巨大的,速度自然很快。相反如果没有索引,那就要遍历所有数据,最差情况下每个数据项都要发生一次 IO,那么总共需要百万次的 IO,速度自然很慢。
Mysql使用索引为什么会变快?相关推荐
- 面试官:为啥加了索引查询会变快?
面试官:你在工作中有遇到SQL查询比较慢的情况吗? 果子:有的.随着业务的发展,表中的数据量会越来越大,查询就会越来越慢 面试官:那你是如何优化查询慢的问题? 果子:在需要查询的列上加索引 面试官:那 ...
- Mysql 建立索引之后反而变慢(已解决)
Mysql 建立索引之后反而变慢(已解决) 记录一个神奇的问题,解决方法分享给大家,碰到类似问题,可以试试这种方法. SQL查询背景 需要优化建索引的表为 FEDERATED 引擎(远程表) 数据库1 ...
- mysql添加索引反而速度变慢
索引失效几种情况 1.使用in.not in,会导致索引失效 失效的原因和 Mysql 的版本以及表中的数据量有关系,在 8.0 之后的版本是走索引的 2.or 分割的条件,如果 or 左边的条件存在 ...
- 为什么用了索引之后,查询就会变快?
来自:会点代码的大叔 =致力于用大白话讲解复杂的技术= 本期问题 QUESTION 为什么用了索引之后,查询就会变快? 相信很多程序员朋友对数据的索引并不陌生,最常见的索引是 B+ Tree 索引,索 ...
- 为什么索引可以让查询变快,你有思考过吗?
作者 | topEngineerray 来源 | https://blog.csdn.net/topdeveloperr/article/details/88742503 概述 人类存储信息的发展历程 ...
- mysql数据库索引页号为什么从3开始_MySQL数据库快问快答
原标题:MySQL数据库快问快答 前言 今天楼主给大家列一下关于数据库几个常见问题的要点,如果大家对其中的问题感兴趣,可以自行扩展研究. 1. UNION ALL 与 UNION 的区别 UNION和 ...
- mysql索引使增删变慢_mysql优化(四)–索引
http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 一. 四种索引类型: 主键索引,唯一索引,全文索引,普通索引 二. 为什 ...
- 面试官 | 为什么用了索引之后,查询就会变快?
为什么用了索引之后,查询就会变快? 相信很多程序员朋友对数据的索引并不陌生,最常见的索引是 B+ Tree 索引,索引可以加快数据库的检索速度,但是会降低新增.修改.删除操作的速度,一些错误的写法会导 ...
- mysql索引使增删变慢_mysql优化之索引篇
mysql,对it打工人,这个几乎是必备的技能之一.mysql可以解决我们平时工作中的大量的.有关增删查改的问题.所以想深入了解mysql,我觉得关键在于他的增删查改背后的算法,开搞. 面对增删查改等 ...
最新文章
- 无法消除恐惧?Nature发现肠道菌与大脑间更多的神秘联系...
- python终端中退格键,方向键不能使用
- 可以伸缩的查询面板 (searchBar)
- FZOJ2110: Star
- append和extend区别
- caffe的googlenet模型使用
- 规则引擎实现生产调度系统
- php钓鱼网站怎么做视频教程,反黑钓鱼网站全过程
- Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
- 游戏服务器背包设计与开发
- HDFS中NameNode和Secondary NameNode
- 拖欠银行贷款的后果有哪些
- 微信weixin://xxx 分析
- 微信小程序傻瓜制作_微信小程序模板制作:手把手教你做一个生鲜小程序
- 如何从第三方应用下载广播电台的缓存节目内容
- Unity中Destory销毁对象不是立即销毁
- Oracle 实验六:PL/SQL编程基础(1)
- IDEA—Maven项目JDK版本设置
- 数学分析教程(科大)——1.4笔记+习题
- 人工智能--自动编码器
热门文章
- 魔枪士未转职刷图视频
- Avellaneda Stoikov’s market-making strategy AS模型的通俗理解篇(二)
- python画小猪乔治_小猪佩奇怎样画
- SQL 语句大全(1)
- 2019写给对象的话_恋爱中写给对象看的说说 2019最流行的情侣间情话真实浪漫
- 计算机软件档案资料员难做吗,资料员:做资料很难吗?
- android 4.4 art模式,从未如此流畅 Android 4.4 ART模式体验
- php微信推文大图,微信公众号图文排版?看这一篇就够了
- 校园分期市场的机遇与风险
- 面试前必备的 JavaScript 基础知识梳理总结