阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SQL优化 MySQL版 – B树索引详讲

380次阅读
没有评论

共计 1531 个字符,预计需要花费 4 分钟才能阅读完成。

为什么要进行 SQL 优化呢?很显然,当我们去写 sql 语句时:

1 会发现性能低

2. 执行时间太长,

3. 或等待时间太长

4.sql 语句欠佳,以及我们索引失效

5. 服务器参数设置不合理

SQL 语句执行过程分析

1. 编写过程:

编写过程就是我们平常写 sql 语句的过程,也可以理解为编写顺序,以下就是我们编写顺序:

select from join on where 条件 group by 分组 having 过滤组 order by 排序 limit 限制查询个数

我们虽然是这样去写的,但是它 MySQL 的引擎去解析时,并不是依照我们以上编写的这样的顺序

它并 不是先解析 select 而是先解析 from,也就说,我们的解析过程跟编写过程是不一致的,所以我们看下发的解析顺序

2. 解析过程:

from on join where group by having select order by limit 

以上就是 mysql 的解析过程,我们发现,跟我们编写的过程 完全不一致!

索引

什么是索引 (index)? 简单的来讲就是书的目录

比如说我现在要通过字典来查 “王” 这个字,如果你在没有目录的情况下去找 “王” 这个字,你就需要把这个字典从头到尾的翻一遍 如果有一千页,你就必须一页一页的去翻,直到找到为止

索引就相当于目录,查这个“王”之前先去翻看目录 发现“W”在 300 页,因为王首字母是“W”,我们直接去在 300 页中找,这样找起来就非常快;

索引在数据库中是关键字 insex,用官方的定义的意思来说,索引就是帮助 MySQL 快速高效的获取数据的数据结构

索引是一个数据结构,它是一个为了高效查询数据的数据结构;

那它到底是什么数据结构呢?

其实它就是一个树,我们用的比较多的就是 B 树、Hash 树,在 MySQL 里面,用的就是 B 树索引

B 树索引

首先我画一个图,假装这个是数据表,并且给 age 列加一个索引:

SQL 优化 MySQL 版 - B 树索引详讲

就把这个索引当成一个目录,也就是 age 为 50 的,就指向第一行,age 为 33 的,指向第五行;

下面我会将 B 树索引画出来,看看到底是怎么索引了:

SQL 优化 MySQL 版 - B 树索引详讲

我们给 age 加了索引列后,它就会像树一样,把小的放到左边,把大的放到右边 第一列为 50,比 50 小的在左边,23,比 23 小的继续向左排列,

33 比 23 大,就向右边排列 20 比 22 小就在 22 后面继续向左排列,以此类推!

比如我们现在需要查 33:

select * From 表名 where age = 33;

不加索引的话,就会从 50 开始查,50 不是 23,不是 22 不是 ….,不加索引就一个个去找;

如果加索引的话,找 33,发现 33 比 50 小,第一次,再去找 23,第二次,33 比 23 大,第三次,仅需三次就查到了:

SQL 优化 MySQL 版 - B 树索引详讲

索引的弊端

1. 索引本身很占空间,可以存放在内存 / 硬盘(通常)

2. 索引不是所有情况均可适用比如:少量数据、频繁更新的字段(如果数据表中的某一列经常会发生改变,那么这一列就不适合做索引)

3. 索引确实可以提高查询效率,但是同时会降低增删改的效率,比如:

我们没有索引,你改 44,改成 45,很好改,直接改就行了,如果你有索引,我不光要改表里面的 44,我需要把 B 树里面的 44 也要改

SQL 优化 MySQL 版 - B 树索引详讲

有些人就觉得不划算了,提升一个降低三个,这样就很不划算了,其实很划算的!

因为我们大部分情况下都是在查询,增删改很少,因为查询影响性能很大的,所以非常有必要使用它

索引的优势

1. 提高了查询效率

客户端到服务端,链接服务端是通过 IO,通过输入输出流,所以说,提高查询效率就是降低了 IO 的使用率

2. 降低 CPU 使用率

比如说我 sql 里面有一个 order by desc 根据年龄降序或升序,如果没有索引,你需要把 age 全部拿出来全部排个序,但是如果有了索引,你就不需要排序了, B 树本身就是一个排好序的结构,最左边必然是最小的,最最右边必然是最大的:

SQL 优化 MySQL 版 - B 树索引详讲

只需要根据一定的规则遍历出来就行了。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1531字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7805899
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...