English
购物车图片 购物车 ( )
专业的品牌服务,为您创造更高的价值
总体概述 客户评价

【干货分享】达梦SQL优化——基础篇(3)



在前两期的分享中,我们介绍了在做单表及多表查询时用到的SQL操作符。本次,我们就来讲一讲过滤和分组排序时用到的操作符。

 

过滤条件:SLCT

这类操作符比较简单,是对结果集进行过滤,需要注意的是操作符的描述信息,从描述信息中我们可以看到对于下层操作有哪些可用的过滤条件,这些条件往往是优化方向的来源。


【干货分享】达梦SQL优化——基础篇(3)


需要关注的是SLCT 的描述部分  (exp_cast(T2.ID) > 5 AND exp11 <= 0),这里括号中的内容将ID > 5 标注为了EXP_CAST(T2.ID)> 5,ID NOT LIKE '%c%'标注为了 EXP11 <= 0。其中EXP_CAST(T2.ID)> 5 提供的信息告诉我们,列ID 和数字5进行比较,是要将列作类型转换的,那么也就是说,就算ID列上存在索引,可能也不能进行范围扫描,因为索引范围扫描的输入要求是和索引列上的类型相同,我们验证一下

 

【干货分享】达梦SQL优化——基础篇(3)

确实,在存在索引( create indexi_index3 on t2(id))的情况下,单列等值查询也没有走索引进行查询,这个在此也只说明一个大致原理,不同类型数据进行比较时会先选取一种比较类型,再确定比较方法。比如在此例中,比较  ID(VARCHAR)= 5(INT),服务器优先选择把类型转换成INT 进行比较,所以导致ID列需要做类型转换,从而不能利用索引(没有索引存储了转换之后的数据)。碰到这种情况,我们需要把索引列的对比对象转换为和索引列一样的格式



【干货分享】达梦SQL优化——基础篇(3)


另外一个条件ID NOT LIKE '%c%',转换为EXP11 <= 0 ,实际上是把NOT LIKE 转换成了 INSTR(ID,'c') <= 0, 原理在此暂不多赘述,我们希望做到的是

对于SLCT描述项中的每一个,都能在原始SQL中找到对应的条件,并看下是否存在优化的可能性


分组:HAGR,SAGR

这类操作符都是对取到的数据做一些处理,或归并,或排序,而归并和排序在某些情况下是互通的我们先看这些操作符出现的基本情况。存在GROUP 的语句,大概率会出现这两个之一

 

SQL> create table t4(id int,id1varchar);

SQL> insert into t4 select level,levelfrom dual connect by level < 10000;

SQL> commit;

 

【干货分享】达梦SQL优化——基础篇(3)


HAGR是最基础的分组方式,HASH AGR操作,对于没有优化条件的分组语句,一般都会按这种方式进行分组,分组原理和HASH INNER JOIN 的方式类似,将原表数据取出,每个计算FOLD,发现有FOLD相同,且满足后续条件的合并为一组(,不难发现,如果基表数据非常庞大时,HAGR的计算量是不容忽视的,那么满足一定条件的情况下,我们可以利用有序性走SAGR操作符

 

SQL> create or replace index i_test4 ont4(id,id1);



【干货分享】达梦SQL优化——基础篇(3)


这里出现SAGR操作符,说明下层的输出是按分组列排序的,下层为SSCN I_TEST4,而I_TEST4为(ID,ID1)组合索引,按照ID有序,满足SAGR条件


SAGR, SORTED AGR操作,不同于HASH AGR,由于下层数据有序,同一分组的数据按照顺序取出就行,节省了大量的计算


排序:SORT:

SORT是做排序操作时使用到的操作符,我们可以进行如下实验。


【干货分享】达梦SQL优化——基础篇(3)

 

可以看到,这里并没有出现SORT操作符。如前文所说,索引I_TEST已经是以ID有序的了,所以在下层的SSCN中已经把排序的任务做完了。如果我们换一列来测试。

 

SQL> explain select id,id1 from t4order by id1 desc;

 


【干货分享】达梦SQL优化——基础篇(3)


如果是对id1列进行排序,则在SSCN之后,还需要针对id1做一次SORT,这对数据库也是一笔不小的开销。所以在实际运用中,我们也可以想办法利用索引的有序性来完成排序的操作。

 

达梦SQL优化的基础篇,关于操作符的介绍就到这里了。在后续的分享中,我们还会为大家介绍执行计划的查看以及索引方面的知识,敬请期待!

 

【干货分享】达梦SQL优化——基础篇

【干货分享】达梦SQL优化——基础篇(2)


客户资料:
年缴保费:
客户需求:



在前两期的分享中,我们介绍了在做单表及多表查询时用到的SQL操作符。本次,我们就来讲一讲过滤和分组排序时用到的操作符。

 

过滤条件:SLCT

这类操作符比较简单,是对结果集进行过滤,需要注意的是操作符的描述信息,从描述信息中我们可以看到对于下层操作有哪些可用的过滤条件,这些条件往往是优化方向的来源。


【干货分享】达梦SQL优化——基础篇(3)


需要关注的是SLCT 的描述部分  (exp_cast(T2.ID) > 5 AND exp11 <= 0),这里括号中的内容将ID > 5 标注为了EXP_CAST(T2.ID)> 5,ID NOT LIKE '%c%'标注为了 EXP11 <= 0。其中EXP_CAST(T2.ID)> 5 提供的信息告诉我们,列ID 和数字5进行比较,是要将列作类型转换的,那么也就是说,就算ID列上存在索引,可能也不能进行范围扫描,因为索引范围扫描的输入要求是和索引列上的类型相同,我们验证一下

 

【干货分享】达梦SQL优化——基础篇(3)

确实,在存在索引( create indexi_index3 on t2(id))的情况下,单列等值查询也没有走索引进行查询,这个在此也只说明一个大致原理,不同类型数据进行比较时会先选取一种比较类型,再确定比较方法。比如在此例中,比较  ID(VARCHAR)= 5(INT),服务器优先选择把类型转换成INT 进行比较,所以导致ID列需要做类型转换,从而不能利用索引(没有索引存储了转换之后的数据)。碰到这种情况,我们需要把索引列的对比对象转换为和索引列一样的格式



【干货分享】达梦SQL优化——基础篇(3)


另外一个条件ID NOT LIKE '%c%',转换为EXP11 <= 0 ,实际上是把NOT LIKE 转换成了 INSTR(ID,'c') <= 0, 原理在此暂不多赘述,我们希望做到的是

对于SLCT描述项中的每一个,都能在原始SQL中找到对应的条件,并看下是否存在优化的可能性


分组:HAGR,SAGR

这类操作符都是对取到的数据做一些处理,或归并,或排序,而归并和排序在某些情况下是互通的我们先看这些操作符出现的基本情况。存在GROUP 的语句,大概率会出现这两个之一

 

SQL> create table t4(id int,id1varchar);

SQL> insert into t4 select level,levelfrom dual connect by level < 10000;

SQL> commit;

 

【干货分享】达梦SQL优化——基础篇(3)


HAGR是最基础的分组方式,HASH AGR操作,对于没有优化条件的分组语句,一般都会按这种方式进行分组,分组原理和HASH INNER JOIN 的方式类似,将原表数据取出,每个计算FOLD,发现有FOLD相同,且满足后续条件的合并为一组(,不难发现,如果基表数据非常庞大时,HAGR的计算量是不容忽视的,那么满足一定条件的情况下,我们可以利用有序性走SAGR操作符

 

SQL> create or replace index i_test4 ont4(id,id1);



【干货分享】达梦SQL优化——基础篇(3)


这里出现SAGR操作符,说明下层的输出是按分组列排序的,下层为SSCN I_TEST4,而I_TEST4为(ID,ID1)组合索引,按照ID有序,满足SAGR条件


SAGR, SORTED AGR操作,不同于HASH AGR,由于下层数据有序,同一分组的数据按照顺序取出就行,节省了大量的计算


排序:SORT:

SORT是做排序操作时使用到的操作符,我们可以进行如下实验。


【干货分享】达梦SQL优化——基础篇(3)

 

可以看到,这里并没有出现SORT操作符。如前文所说,索引I_TEST已经是以ID有序的了,所以在下层的SSCN中已经把排序的任务做完了。如果我们换一列来测试。

 

SQL> explain select id,id1 from t4order by id1 desc;

 


【干货分享】达梦SQL优化——基础篇(3)


如果是对id1列进行排序,则在SSCN之后,还需要针对id1做一次SORT,这对数据库也是一笔不小的开销。所以在实际运用中,我们也可以想办法利用索引的有序性来完成排序的操作。

 

达梦SQL优化的基础篇,关于操作符的介绍就到这里了。在后续的分享中,我们还会为大家介绍执行计划的查看以及索引方面的知识,敬请期待!

 

【干货分享】达梦SQL优化——基础篇

【干货分享】达梦SQL优化——基础篇(2)


相关案例
2020 - 07 - 24
点击次数: 0
在生产环境中,当我们误操作删除了重要数据时,可以使用闪回查询来找回原来的数据,但当表被删除或者数据库没有开启闪回功能时,则无法使用闪回来获取原有的表数据;此时我们可以使用基于归档日志的时间点的恢复(不完全恢复)来达到恢复数据或恢复表的目的。本章介绍DM8数据库如何使用归档日志文件将数据库恢复到指定时间点的状态。本章内容已在如下环境上测试:①操作系统:中标麒麟7;②数据库版本:达梦8;相关关键字:D...
2020 - 06 - 19
点击次数: 0
DM8介绍DM8作为达梦公司新一代自研数据库,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。自DM8产品上线以来,广受应用,达梦大学已于2020年6月...
2020 - 06 - 18
点击次数: 0
学员们,大家好呀!一年一度的618电商大促又来啦大家都准备买些什么?零食、书籍、水果.....还是手机、笔电、游戏机?不趁着活动囤一波,对得起手机里的APP啵?来,一起喊口号:钱包可能干扁,购物欲望不会减!花呗可能超出,拼单付款不会输!月光可能不停,优惠算法我会赢!加购可能太多,购完手也不会剁!优惠券、专属红包、叠蛋糕、组团助力.....在优惠的套路里,哪有人能逃脱它的魔咒?!只怪,为什么身边没个...
2020 - 06 - 10
点击次数: 0
DM8介绍DM8作为达梦公司新一代自研数据库,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。自DM8产品上线以来,广受应用,达梦大学已于2020年6月...
官网微信公众号官方微信公众号
官方技术咨询一群官方技术咨询二群
官方技术咨询二群官方技术咨询三群
官网培训咨询QQ官网培训咨询QQ
支持:dmtech@dameng.com
地址:中国·武汉·东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层
咨询热线:400 991 6599
传真:+86 0755-2788 8009
友情链接:
鄂Copyright ©2017 - 2020 武汉达梦数据库股份有限公司
犀牛云提供企业云服务
X
3

电话号码

4

阿里旺旺设置

1

在线咨询

等待加载动态数据...

等待加载动态数据...

5

电话号码管理

6

二维码管理

  • 微信二维码

    微信二维码

等待加载动态数据...

等待加载动态数据...

展开