性能优化技巧:附表过滤

代码探霄人
• 阅读 779

一、 问题背景与适用场景

在《性能优化技巧:有序归并》中我们见证了有序归并算法提升主子表的关联性能,在集算器中,还有进一步提高性能的办法—附表。集算器组表支持主子表保存在同一文件中,先用主表创建组表文件,再在主表上附加上子表,子表必须含有主表的维字段,并通过这个字段进行关联,这样的子表称为附表。

附表在存储时,关联键只需在主表保存一次,子表就不用保存了,在读取时就可以减少读硬盘的时间。并且子表已经通过关联键附加在主表记录上了,相当于已经预先关联好了,和有序归并关联相比,就可以减少关联时的比对运算,从而提高关联性能。

下面我们就用实例来对比测试一下集算器附表与有序归并的关联性能。

二、 测试环境

测试机有两个Intel2670 CPU,主频2.6G,共16核,内存64G,SSD固态硬盘。

采用TPCH标准生成的200G数据,主表是orders,子表是lineitem。两表中记录分别按O_ORDERKEY、L_ORDERKEY升序排列。

三、 附表生成

从以前测试用的组表文件orders.ctx和lineitem.ctx中读取数据来生成附表文件,编写SPL脚本如下:

性能优化技巧:附表过滤

用主表.attach(子表,…)来建立主子表间的依附关系。

四、 测试

编写有序归并测试的SPL脚本如下:

性能优化技巧:附表过滤

A1单元格是测试并行数。

编写附表测试的SPL脚本如下:

性能优化技巧:附表过滤

测试结果列表如下(单位:秒):

性能优化技巧:附表过滤

五、 结论

从测试结果可以看出,在各种并行线程下,用附表测试的运行时间只有有序归并的60%多,确实可以较大地提高主子表关联性能。

另据其它测试表明,由于主子表是1:N的关系,当N越大时或者主表主键是多字段时,就越能减少读硬盘的时间和关联时的比对时间,性能提高就越明显。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Snuffel806 Snuffel806
4年前
学习MySQL优化原理,这一篇就够了!
前言说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT、不使用NULL字段、合理创建索引、为字段选择合适的数据类型.....你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而
咕咕鸡 咕咕鸡
2年前
常用性能调优策略及在风控场景下应用
引言性能调优也是有迹可寻的,本文梳理了在实际开发过程中沉淀的通用性能优化策略,并且结合风控系统服务内使用场景,帮助读者理解性能调优相关可行策略,从而建立性能优化SOP概念,以后出现问题即可参照优化流程改造即可。<!
爱丽丝13 爱丽丝13
4年前
聊聊前端性能优化
为什么要做性能优化?性能优化有多重要?网站的性能对于用户的留存率、转化率有很大的影响,直白的说,提高网站的性能可以直接提高网站带来的收益。性能优化的分类前端的性能优化主要分为两类:1.加载时优化;2.运行时优化;例如压缩文件、使用CDN加载静态资源属于加载时优化;及时的解绑事件、减少DOM的操作属于运行时优化。吉
巴拉米 巴拉米
4年前
前端性能优化
为什么要做性能优化?性能优化有多重要?网站的性能对于用户的留存率、转化率有很大的影响,直白的说,提高网站的性能可以直接提高网站带来的收益。性能优化的分类前端的性能优化主要分为两类:1.加载时优化;2.运行时优化;例如压缩文件、使用CDN加载静态资源属于加载时优化;及时的解绑事件、减少DOM的操作属于运行时优化。吉
报表的性能优化
​对于一个报表检验,性能就是其检验方向之一,皕杰报表之初就把性能摆到了第一位,但当面对超量的数据,服务器硬件毕竟有限,因而在设计报表时,性能优化也是需要考虑的问题。可以从以下几个方面来考虑优化:1.对数据集的sql语句进行优化,利用参数控制取出数据的数量,还可以使用视图或存储过程优化数据的获取。2.在制表的过程过程中进行函数的优化,使用select函数时,相
Wesley13 Wesley13
3年前
CPU缓存和内存屏障
CPU性能优化手段缓存为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存。尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。!(https://oscimg.oschina.net/oscnet/bbe04d9c9b6eb586bfccbd23808
Stella981 Stella981
3年前
JavaScript 性能优化技巧分享
JavaScript作为当前最为常见的直译式脚本语言,已经广泛应用于Web应用开发中。为了提高Web应用的性能,从JavaScript的性能优化方向入手,会是一个很好的选择。本文从加载、上下文、解析、编译、执行和捆绑等多个方面来讲解JavaScript的性能优化技巧,以便让更多的前端开发人员掌握这方面知识。什么是高性能的JavaScr
23年通天塔搭建页前端性能优化阶段分享
前言通天塔搭建页项目是用来搭建各类活动页面,比较老且业务复杂的项目,可优化点还是非常多的。今年侧重对运营页首屏加载的性能优化,在保证系统稳定可控、需求持续迭代前提下,最终提升了58.8%速度。在此非常感谢通天塔产品组、后端组、前端组同学,对项目性能优化大力
ClickHouse内幕(3)基于索引的查询优化
ClickHouse索引采用唯一聚簇索引的方式,即Part内数据按照orderbykeys有序,在整个查询计划中,如果算子能够有效利用输入数据的有序性,对算子的执行性能将有巨大的提升。本文讨论ClickHouse基于索引的查询算子优化方式。在整个查询计划中
京东云开发者 京东云开发者
7个月前
小小的日志,大大的坑
作者:京东零售王军1.背景压测过程中优化线程池以后单机qps存在性能瓶颈,优化过程中发现默认线程池及日志对性能存在严重的影响所以引发了一系列对日志优化的整理2.哪些场景可能导致性能问题在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据