先来个生活学习中直观的体验……查字典

字典都有拼音、偏旁部首或者笔画数三个供检索的部分。

它们能以不同的方式快速定位到某个字词在哪一页。

而且存放这些索引部分的地方很好找,不是字典后面,就是字典前面。

但显然这些索引部分需要额外的纸张来记录。时间成本和材料成本总得有平衡不是?

假如,你的字典没有这些索引部分,你遇到一个很生僻的字,你会怎么查?效率如何?

假如你是杠精,说:没问题啊,我记得所有字存储在字典的哪个地方,那你很6,我无语。

MySQL的索引对象和字典的索引部分就有些像,对不同字段建立索引,就好比字典增加了快速查字词的方式,比如五笔,或者其它。

拼音的索引和MySQL的最像,因为拼音的分段查找更简易通用。

MySQL的查询走索引,好比你查字词通过索引部分,能快速定位目标在字典哪一页。

MySQL的查询不走索引,就好比你查字词不使用字典的索引部分,查不查得到就看运气了,但计算机可能存在很大问题。

我想MySQL的索引设计灵感正是来源于字典的设计。

这样的话,下面的不看应该都能大概理解了

不使用索引会怎样呢?使用了索引又会如何?
假如不使用索引,那么当查找一行记录时,会怎样操作呢?我想到三种方法。
第一种方式:把所有页都加载至内存中,再进行精确的定位和查找。这种方式存在很大的问题,因为我们要查找的行显然只在某一页上,而把所有页都加载进内存,如果数据量很大,内存很可能都装不下这么多页的数据,就算内存能够存储,也只是加载很多没有必要加载的页
第二种方式:先加载一页的数据,在内存中对这一页进行查找 如果找不到想要查找的行,再加载第二页,第三页,……运气差一点,直到加载最后一页才能够确定想要查找的记录是否存在。这种方式页也存在很大的问题,就是频繁的进行磁盘IO操作,造成IO冗余。
第三种方式:一次加载几页数据,在内存中进行精确查找,如果找不到想要查找的行,再加载下一组,……,如此反复执行。这种方式每次加载的数据量比第一种少,但仍然会加载冗余的页,还有可能进行多次磁盘IO操作。显然也不合适。
而如果使用了索引,那么当查找某一行记录时,便可经过很少次数的io就定位到所要查找的行所在的页,并且只需要加载这一页的记录至内存中,在内存中再进行精确的后续操作。这种方式避免了冗余地加载页,同时也避免了大量的、不必要的io操作,从而提高查询效率。
那我们要做的就是建立合适的索引,并使查询语句能够使用索引的方式进行。

MySQL为什么在使用索引的情况下能够提高查询效率,不使用索引又会是什么情形相关推荐

  1. ElasticSearch面试 - es 在数据量很大的情况下如何提高查询效率啊?

    面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的.很多时 ...

  2. ES 在数据量很大的情况下如何提高查询效率

    如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的. 很多时候数 ...

  3. ElasticSearch在数据量很大的情况下如何提高查询效率

    目录: 一. es 在数据量很大的情况下(数十亿级别)如何提高查询效率? 二. 数据预热 三. 冷热分离 四. document 模型设计 五. 分页性能优化 一. es 在数据量很大的情况下(数十亿 ...

  4. 关于MySQL什么时候使用索引 什么情况下应不建或少建索引

    一,什么情况下使用索引 1. 表的主关键字 自动建立唯一索引 2. 表的字段唯一约束 ORACLE利用索引来保证数据的完整性 3. 直接条件查询的字段 在SQL中用于条件约束的字段 如zl_yhjbq ...

  5. mysql基础14(关于mysql数据库在没有主键情况下去除重复数据办法)

    关于mysql数据库在没有主键情况下去除重复数据办法 约定 表名:mat 根据 cat 字段去重 新增加主键为 id 步骤 1.为mat新增一列自增主键 alter table mat add col ...

  6. mysql 虚拟列索引_使用MySQL 5.7虚拟列提高查询效率

    原标题:使用MySQL 5.7虚拟列提高查询效率 导读 翻译团队:星耀队@知数堂 团队成员:星耀队-芬达,星耀队-顺子,星耀队-M哥 原文出处:https://www.percona.com/blog ...

  7. mysql 查询数据库索引语句_利用SQL语句查询数据库中所有索引

    本章我们就要讲解一下如何利用sql语句来查询出数据库中所有索引明细.当然了,我们可以在microsoft sql server management studio中选择"表"- & ...

  8. ElasticSearch 在数十亿级别数据下,如何提高查询效率?

    来源:https://zhuanlan.zhihu.com/p/60458049 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就 ...

  9. 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化

    1.概述 转载:https://zhuanlan.zhihu.com/p/60458049 这里面主要有个filesystem cache 服务这个想法很好. 面试题 es 在数据量很大的情况下(数十 ...

最新文章

  1. ERP_基于Oracle SOA的企业服务总线整合
  2. mirc635.rar
  3. angular模拟web API
  4. Original error was: DLL load failed: 找不到指定的模块。--解决办法
  5. linux中mbr最大多少分区,Linux与磁盘分区介绍(MBR,GPT)
  6. vue-manage-system 后台管理系统开发总结
  7. Centos 7下安装nginx,使用yum install nginx,提示没有可用的软件包(亲测)
  8. SpringMVC对Ajax请求的处理
  9. HDU 1213 How Many Tables(并查集模板)
  10. 数字音视频知识点汇总(二)
  11. .NET中操作SQLite
  12. dumpsys gfxinfo packacges计算帧率
  13. 由SVN的月份计算错误,谈一个月的含义
  14. android 播放语音anr,Android语音合成出现ANR
  15. AXI总线的一些知识
  16. 企业级服务器固态硬盘,企业级硬盘和固态硬盘有什么区别
  17. ios kb转m_字节、kb、M怎么换算
  18. Linux挂载硬盘(容量大于2T)
  19. 解决win10更新,笔记本连手机热点网页部分图片、百度网盘验证码显示不出来问题。
  20. Mysql通过ibd文件恢复数据的步骤详解

热门文章

  1. python毕业设计项目源码选题(2)新闻管理系统毕业设计毕设作品开题报告开题答辩PPT
  2. 裁判文书上诉理由分类统计
  3. pymssql中文乱码踩坑
  4. 储能技术解析-储能系统解决方案现状及趋势
  5. linux启动sh文件命令,Linux 运行 .sh 文件的两种方法
  6. PHP codesniffer 配置,如何配置PHP CodeSniffer让我的case语句按照我喜欢的方式缩进?...
  7. sudo -S可以不用手动输入密码,且只要第一次密码正确,后面在有效期内,密码错误也可以
  8. C语言编写程序:从键盘输入一个小写字母,该字母加密后变成其后继第2个字母输出。
  9. Python数据可视化的例子——气泡图(bubble)
  10. 电脑、其他设备控制ABB机器人相关记录(自己用)