GaussDB(DWS) inlist2join优化介绍

举报
积少成多 发表于 2021/07/16 20:59:31 2021/07/16
【摘要】 摘要:对于inlist2join优化的原理和结果展示。

Inlist2join优化

目前很多场景中,大量使用Inlist语法作为查询条件场景,例如视频云场景:Inlist通常使用在车牌号、手机号、人脸特征值等等,这些都含有大量的inlist元素。在这种场景下,应用inlist优化能够极大提升查询效率。

1.什么是inlist

要解释什么是inlist优化,首先要明白什么是inlist。在查询过程中,可以在WHERE子句中使用IN(list)取出符合过滤条件的值,其范围是list列表中的所有元素。In可以理解为一个范围比较操作符,这个范围被指定为IN之后的list列表中的所有元素。参数list表示值列表,当查询匹配到list列表中的任何一个值时,则条件为TRUE,查询匹配成功。这种语法被称为inlist。

2.什么是inlist2join优化?为什么要用到inlist2join优化?

在路径生成的过程中,目标是选择一条代价最小的最优路径。Inlist2join优化是在生成路径过程中进行的优化。对于一条inlist查询,从语义层面上查询解释器会将inlist转换成多个等值条件的OR操作或者是inlist内元素类型的数组,时间复杂度为O(n),这种情况下数据库的查询效率是很低的。而inlist2join优化要做的是,在SQL语句中,当inlist元素数量到达一定程度满足我们设定的阈值条件,此时会将inlist内元素看成一个集合并且换成一个hashjoin,将其临时构建成一张临时表,inlist内的元素作为hashjoin的内表,则此时原来的条件就会被转换成hash匹配,时间复杂度将会从O(n)变成O(1),大大提升效率,从而实现性能的提升。

3.结果展示

我们通过TPCDS中的一个查询,进行inlist2join优化的效果展示。查询中我们主要关注查询代价和WHERE子句中的inlist查询,对比当inlist元素较多时,采用inlist2join优化和未采用时计划的区别。

查询语句:

select s_store_name,sum(ss_net_profit)
from store_sales,date_dim,store,
(select ca_zip
from (
select substr(ca_zip,1,5) ca_zip
from customer_address
where substr(ca_zip,1,5) in (‘89436’,‘30868’,‘65085’…‘18586’,‘79307’,‘15492’) intersect
select ca_zip
from (SELECT substr(ca_zip,1,5) ca_zip,count( * )
from customer_address, customer
where ca_address_sk = c_current_addr_sk and c_preferred_cust_flag=‘Y’
group by ca_zip
having count( * ) > 10)A1)A2) V1
where ss_store_sk = s_store_sk and ss_sold_date_sk = d_date_sk and d_qoy = 1 and d_year = 2002 and (substr(s_zip,1,2) = substr(V1.ca_zip,1,2))
group by s_store_name
order by s_store_name
limit 100;

(注:list内元素数量为400,由于list内元素过多,不一一展示)
未进行inlist转换为join优化,由于inlist元素过多,查询时间复杂度较高,所以代价较大。

当采取inlist2join优化时,将inlist转换为join优化,构建hashjoin,查询效率提升,查询代价大大降低。

总结:

当inlist的元素足够多的时候,适宜使用inlist转换为join优化,会极大提升查询效率。而当inlist元素较少时,使用inlist2join优化,进行hashjoin的构建的代价则会高于直接进行查询,这种情况下则不适宜使用inlist2join优化。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。