没有合适的资源?快使用搜索试试~ 我知道了~
35.join语句怎么优化?1
需积分: 0 1 下载量 54 浏览量
2022-08-03
17:21:42
上传
评论
收藏 1.2MB PDF 举报
温馨提示
![preview](https://dl-preview.csdnimg.cn/86296629/0001-1d2a791af9cc3485a7d42eccec564c28_thumbnail.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
20页
1. 根据索引a,定位到满足条件的记录,将id值放入read_rnd_buffer中 3. 排序后的id数组,依次到主键id索引中查记录,并作为结果返回 1.
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/86296629/bg1.jpg)
35 | join语句怎么优化?
2019-02-01 林晓斌
在上一篇文章中,我和你介绍了join语句的两种算法,分别是Index Nested-Loop Join(NLJ)和
Block Nested-Loop Join(BNL)。
我们发现在使用NLJ算法的时候,其实效果还是不错的,比通过应用层拆分成多个语句然后再拼
接查询结果更方便,而且性能也不会差。
但是,BNL算法在大表join的时候性能就差多了,比较次数等于两个表参与join的行数的乘积,很
消耗CPU资源。
当然了,这两个算法都还有继续优化的空间,我们今天就来聊聊这个话题。
为了便于分析,我还是创建两个表t1、t2来和你展开今天的问题。
![](https://csdnimg.cn/release/download_crawler_static/86296629/bg2.jpg)
为了便于后面量化说明,我在表t1里,插入了1000行数据,每一行的a=1001-id的值。也就是
说,表t1中字段a是逆序的。同时,我在表t2中插入了100万行数据。
Multi-Range ReadMulti-Range Read优化优化
在介绍join语句的优化方案之前,我需要先和你介绍一个知识点,即:Multi-Range Read优化
(MRR)。这个优化的主要目的是尽量使用顺序读盘。
在第4篇文章中,我和你介绍InnoDB的索引结构时,提到了“回表”的概念。我们先来回顾一下这
个概念。回表是指,InnoDB在普通索引a上查到主键id的值后,再根据一个个主键id的值到主键
索引上去查整行数据的过程。
然后,有同学在留言区问到,回表过程是一行行地查数据,还是批量地查数据?
我们先来看看这个问题。假设,我执行这个语句:
create table t1(id int primary key, a int, b int, index(a));
create table t2 like t1;
drop procedure idata;
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i<=1000)do
insert into t1 values(i, 1001-i, i);
set i=i+1;
end while;
set i=1;
while(i<=1000000)do
insert into t2 values(i, i, i);
set i=i+1;
end while;
end;;
delimiter ;
call idata();
![](https://csdnimg.cn/release/download_crawler_static/86296629/bg3.jpg)
主键索引是一棵B+树,在这棵树上,每次只能根据一个主键id查到一行数据。因此,回表肯定是
一行行搜索主键索引的,基本流程如图1所示。
图1 基本回表流程
如果随着a的值递增顺序查询的话,id的值就变成随机的,那么就会出现随机访问,性能相对较
差。虽然“按行查”这个机制不能改,但是调整查询的顺序,还是能够加速的。
因为大多数的数据都是按照主键递增顺序插入得到的,所以我们可以认为,如果按照主键因为大多数的数据都是按照主键递增顺序插入得到的,所以我们可以认为,如果按照主键
的递增顺序查询的话,对磁盘的读比较接近顺序读,能够提升读性能。的递增顺序查询的话,对磁盘的读比较接近顺序读,能够提升读性能。
这,就是MRR优化的设计思路。此时,语句的执行流程变成了这样:
1. 根据索引a,定位到满足条件的记录,将id值放入read_rnd_buffer中;
2. 将read_rnd_buffer中的id进行递增排序;
3. 排序后的id数组,依次到主键id索引中查记录,并作为结果返回。
select * from t1 where a>=1 and a<=100;
剩余19页未读,继续阅读
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar](https://profile-avatar.csdnimg.cn/bb35b690636d4a029dec96db79fa6df6_weixin_35781693.jpg!1)
江水流春去
- 粉丝: 43
- 资源: 352
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 苹果CMS红色red1电影影视主题网站模板
- 光大证券-20170725-阻力支撑相对强度(RSRS)选股-技术指标系列报告之三.pdf
- EMV 4.4 Book 1~4
- 1_pt_cfix .xlsx
- EMV 4.3 Book 1~4
- EMV 4.2 Book 1~4
- EMV 4.1 Book 1~4
- 基于Python实现的遥感图像的语义分割,分别使用Deeplab V3+和unet模型+源代码+文档说明+数据集.zip
- Python基于Django服装仓库进销存库存管理系统+源代码+文档说明+数据库(高分毕设)
- 2024魔改php版大屏微信墙互动展示系统 大屏幕互动系统程序动态背景图和配乐素材含搭建教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0