Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

SQL变长列优化问题的介绍 PDF 下载


分享到:
时间:2021-12-02 09:01来源:http://www.java1234.com 作者:转载  侵权举报
SQL变长列优化问题的介绍 PDF 下载
失效链接处理
SQL变长列优化问题的介绍  PDF 下载


本站整理下载:
提取码:o3a4 
 
 
相关截图:
 
主要内容:

我们将100W数据加载到t1表中,t2表装载6000条数据。
执行如下sql:
select count(*) from t1 tr left join t2 us on tr.GenerateUserID = us.id;
这个结果在无任何io的前提下,执行速度为9秒。通过对比执行计划发现对于t1表的扫描时间为7秒,主要瓶颈点在这个t1的全表扫描上,而left join本身必须对左表进行全表扫描,所以这个问题主要在提升t1的扫描速度上。
经过分析,t1表是一个大宽表,8s本身,如果对表的数据页进行全表扫描的话会扫到很多无效页,我们发现t1表generateuserid列是有索引的,索引页和数据页分别存储不同的存储空间,因此如果我们直接扫描索引页,可以避免对无效页的扫描,进而提升查询速度。
同时,8s内部对于变长列的索引部分存储只是存储了一部分数据,因此全表扫描不可避免的要扫描数据页,因此,还需要将generateuserid类型修改为char(36),作为定长列来使用。
经过上述修改后,执行查询可以发现t1表扫描时间由7秒变为了1秒以内,完成了优化,计划如下:
QUERY: (OPTIMIZATION TIMESTAMP: 11-10-2021 10:12:04)
------
select  count(*) from t1 tr left join t2 us on tr.GenerateUserID = us.id
 
Estimated Cost: 838995
Estimated # of Rows Returned: 1
Maximum Threads: 4
0
   1) gbasedbt.tr: INDEX PATH
 
    (1) Index Name: gbasedbt.idx_tblrecord_01
        Index Keys: generateuserid   (Key-Only)  (Serial, fragments: ALL)
 
2) gbasedbt.us: INDEX PATH
 
    (1) Index Name: gbasedbt. 101_3
        Index Keys: id   (Key-Only)  (Serial, fragments: ALL)DYNAMIC HASH JOIN 
    Dynamic Hash Filters: gbasedbt.tr.generateuserid = gbasedbt.us.id 
 

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐