MySQL为什么在使用索引的情况下能够提高查询效率,不使用索引又会是什么情形
先来个生活学习中直观的体验……查字典
字典都有拼音、偏旁部首或者笔画数三个供检索的部分。
它们能以不同的方式快速定位到某个字词在哪一页。
而且存放这些索引部分的地方很好找,不是字典后面,就是字典前面。
但显然这些索引部分需要额外的纸张来记录。时间成本和材料成本总得有平衡不是?
假如,你的字典没有这些索引部分,你遇到一个很生僻的字,你会怎么查?效率如何?
假如你是杠精,说:没问题啊,我记得所有字存储在字典的哪个地方,那你很6,我无语。
MySQL的索引对象和字典的索引部分就有些像,对不同字段建立索引,就好比字典增加了快速查字词的方式,比如五笔,或者其它。
拼音的索引和MySQL的最像,因为拼音的分段查找更简易通用。
MySQL的查询走索引,好比你查字词通过索引部分,能快速定位目标在字典哪一页。
MySQL的查询不走索引,就好比你查字词不使用字典的索引部分,查不查得到就看运气了,但计算机可能存在很大问题。
我想MySQL的索引设计灵感正是来源于字典的设计。
这样的话,下面的不看应该都能大概理解了
不使用索引会怎样呢?使用了索引又会如何?
假如不使用索引,那么当查找一行记录时,会怎样操作呢?我想到三种方法。
第一种方式:把所有页都加载至内存中,再进行精确的定位和查找。这种方式存在很大的问题,因为我们要查找的行显然只在某一页上,而把所有页都加载进内存,如果数据量很大,内存很可能都装不下这么多页的数据,就算内存能够存储,也只是加载很多没有必要加载的页。
第二种方式:先加载一页的数据,在内存中对这一页进行查找 如果找不到想要查找的行,再加载第二页,第三页,……运气差一点,直到加载最后一页才能够确定想要查找的记录是否存在。这种方式页也存在很大的问题,就是频繁的进行磁盘IO操作,造成IO冗余。
第三种方式:一次加载几页数据,在内存中进行精确查找,如果找不到想要查找的行,再加载下一组,……,如此反复执行。这种方式每次加载的数据量比第一种少,但仍然会加载冗余的页,还有可能进行多次磁盘IO操作。显然也不合适。
而如果使用了索引,那么当查找某一行记录时,便可经过很少次数的io就定位到所要查找的行所在的页,并且只需要加载这一页的记录至内存中,在内存中再进行精确的后续操作。这种方式避免了冗余地加载页,同时也避免了大量的、不必要的io操作,从而提高查询效率。
那我们要做的就是建立合适的索引,并使查询语句能够使用索引的方式进行。
MySQL为什么在使用索引的情况下能够提高查询效率,不使用索引又会是什么情形相关推荐
- ElasticSearch面试 - es 在数据量很大的情况下如何提高查询效率啊?
面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的.很多时 ...
- ES 在数据量很大的情况下如何提高查询效率
如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的. 很多时候数 ...
- ElasticSearch在数据量很大的情况下如何提高查询效率
目录: 一. es 在数据量很大的情况下(数十亿级别)如何提高查询效率? 二. 数据预热 三. 冷热分离 四. document 模型设计 五. 分页性能优化 一. es 在数据量很大的情况下(数十亿 ...
- 关于MySQL什么时候使用索引 什么情况下应不建或少建索引
一,什么情况下使用索引 1. 表的主关键字 自动建立唯一索引 2. 表的字段唯一约束 ORACLE利用索引来保证数据的完整性 3. 直接条件查询的字段 在SQL中用于条件约束的字段 如zl_yhjbq ...
- mysql基础14(关于mysql数据库在没有主键情况下去除重复数据办法)
关于mysql数据库在没有主键情况下去除重复数据办法 约定 表名:mat 根据 cat 字段去重 新增加主键为 id 步骤 1.为mat新增一列自增主键 alter table mat add col ...
- mysql 虚拟列索引_使用MySQL 5.7虚拟列提高查询效率
原标题:使用MySQL 5.7虚拟列提高查询效率 导读 翻译团队:星耀队@知数堂 团队成员:星耀队-芬达,星耀队-顺子,星耀队-M哥 原文出处:https://www.percona.com/blog ...
- mysql 查询数据库索引语句_利用SQL语句查询数据库中所有索引
本章我们就要讲解一下如何利用sql语句来查询出数据库中所有索引明细.当然了,我们可以在microsoft sql server management studio中选择"表"- & ...
- ElasticSearch 在数十亿级别数据下,如何提高查询效率?
来源:https://zhuanlan.zhihu.com/p/60458049 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就 ...
- 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化
1.概述 转载:https://zhuanlan.zhihu.com/p/60458049 这里面主要有个filesystem cache 服务这个想法很好. 面试题 es 在数据量很大的情况下(数十 ...
最新文章
- ERP_基于Oracle SOA的企业服务总线整合
- mirc635.rar
- angular模拟web API
- Original error was: DLL load failed: 找不到指定的模块。--解决办法
- linux中mbr最大多少分区,Linux与磁盘分区介绍(MBR,GPT)
- vue-manage-system 后台管理系统开发总结
- Centos 7下安装nginx,使用yum install nginx,提示没有可用的软件包(亲测)
- SpringMVC对Ajax请求的处理
- HDU 1213 How Many Tables(并查集模板)
- 数字音视频知识点汇总(二)
- .NET中操作SQLite
- dumpsys gfxinfo packacges计算帧率
- 由SVN的月份计算错误,谈一个月的含义
- android 播放语音anr,Android语音合成出现ANR
- AXI总线的一些知识
- 企业级服务器固态硬盘,企业级硬盘和固态硬盘有什么区别
- ios kb转m_字节、kb、M怎么换算
- Linux挂载硬盘(容量大于2T)
- 解决win10更新,笔记本连手机热点网页部分图片、百度网盘验证码显示不出来问题。
- Mysql通过ibd文件恢复数据的步骤详解
热门文章
- python毕业设计项目源码选题(2)新闻管理系统毕业设计毕设作品开题报告开题答辩PPT
- 裁判文书上诉理由分类统计
- pymssql中文乱码踩坑
- 储能技术解析-储能系统解决方案现状及趋势
- linux启动sh文件命令,Linux 运行 .sh 文件的两种方法
- PHP codesniffer 配置,如何配置PHP CodeSniffer让我的case语句按照我喜欢的方式缩进?...
- sudo -S可以不用手动输入密码,且只要第一次密码正确,后面在有效期内,密码错误也可以
- C语言编写程序:从键盘输入一个小写字母,该字母加密后变成其后继第2个字母输出。
- Python数据可视化的例子——气泡图(bubble)
- 电脑、其他设备控制ABB机器人相关记录(自己用)