性能优化技巧:前半有序时的排序

2021-01-31
阅读 2 分钟
1.1k
在对数据集进行排序运算时,有时会遇到这样一种场景:数据集T已经按字段a有序,而字段b无序,现在我们要将T按a、b排序,我们称之为前半有序(a有序)的排序。此时我们能想到一种优化的排序方法:从T中先取出a值相同的一组记录,再这一组内对b排序。然后再依次取出下一组a值相同的记录,重复这个动作,直到完成T中所有记录...

性能优化技巧:后半有序分组

2021-01-31
阅读 2 分钟
990
什么是后半有序?如果数据集T已经按字段a、b有序,现在我们要将T按b排序或分组时,因为在a值相同的段内,b都是有序的,这种要排序或分组的字段在分段内有序的情况就称为后半有序。

性能优化技巧:有序分组

2021-01-31
阅读 2 分钟
984
通常分组计算都采用hash方案,即先计算分组字段的hash值,hash值相同的记录被分拣到一个小集合里,然后在这个小集合中遍历找分组字段值相同的聚合成一组。分组的复杂度(比较次数),取决于hash函数的重码率。在hash空间比较小时,重码率就高,比较次数就会多,性能会受较大影响。为了提高性能,就需要分配较大的内存来存...

性能优化技巧:大事实表与大维表关联

2021-01-31
阅读 2 分钟
1.2k
在《性能优化技巧:小事实表与大维表关联》中,我们尝试了小事实表与大维表关联时的性能优化方法,该方法利用了小事实表可以装入内存的特点,将关联键汇集排序后到大维表中查找,避免了遍历大维表的动作。如果事实表与维表都大到不能装载到内存时,这个办法就不再有效了,那么,还有什么办法提高性能呢?

性能优化技巧:小事实表与大维表关联

2021-01-31
阅读 2 分钟
970
在主子表关联查询中,有时会遇到这样一种情况:按条件过滤后的事实表数据量很小,能够全部装载进内存或仅比内存略大一点;而要关联的维表数据量很大,比内存要大很多。这种时候,如果维表是按键有序存储时,因为事实表涉及的维表记录较少,可以一次性用二分查找方法找出来,而不必象HASH运算那样遍历这个大维表,从而提...

性能优化技巧:附表过滤

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

性能优化技巧:有序归并

2021-01-22
阅读 3 分钟
1.3k
在以前的文章中我们介绍过,关系数据库在进行表间关联时是使用HASH分段技术。设两个关联表的规模(记录数)分别是 N 和 M,则 HASH 分段技术的计算复杂度(关联字段的比较次数)大概是 SUM(NiMi),其中 Ni 和 Mi 分别是 HASH 值为 i 的两表记录数,满足 N=SUM(Ni) 和 M=SUM(Mi),这大概率会比完全遍历时的复杂度 NM 要小...

性能优化技巧:维表过滤或计算时的关联

2021-01-22
阅读 4 分钟
1.3k
在事实表与维表的关联查询时,常常会遇到需要对维表的数据进行过滤或者针对维表做计算的情况,这时可以有两种处理方式:1、先做关联(如果是内存则可以是预关联),再对关联后的事实表进行过滤。就象在《性能优化技巧:预关联》和《性能优化技巧:外键序号化》中做的那样。2、先对维表进行过滤,再与事实表做关联。我们...

性能优化技巧:外键序号化

2021-01-12
阅读 3 分钟
988
在《性能优化技巧:部分预关联》一文中,我们介绍了将维表内存化并预关联的技术,但事实表与维表关联时,仍需进行hash计算和比对,怎么提高这一步的性能呢?我们今天再介绍一种优化技巧:外键序号化。

性能优化技巧:部分预关联

2021-01-12
阅读 3 分钟
876
在《性能优化技巧:预关联》中,我们测试了将数据表事先全部加载进内存并做好关联后的查询性能优化问题,但如果内存不够大,不能将维表和事实表全部装入,那怎么办呢?此时,可以将维表预先装入内存,建好索引,实现维表部分的预关联,省去一半hash计算。

性能优化技巧:预关联

2021-01-12
阅读 4 分钟
1.3k
SQL实现JOIN一般是采用HASH分堆的办法,即先计算关联键的HASH值,再将相同HASH值的记录放到一起再做遍历对比。每一个JOIN都要做一轮这样的运算。

性能优化技巧:TopN

2021-01-12
阅读 3 分钟
2.2k
TopN是常见的运算,用SQL写出来是这样(以Oracle为例):       select from (select from T order by x desc) where rownum<=N这个SQL的运算逻辑从其语句上看,要先做排序(Order by),然后再取出前N条。

性能优化技巧:遍历复用提速多次分组

2021-01-12
阅读 2 分钟
1.2k
我们知道,大数据运算性能的瓶颈常常是在外存(也就是硬盘)IO上,因为外存访问性能要比内存低一两个数量级。因此,做性能优化时,减少硬盘的访问量有时要比减少CPU计算量更为重要。同一个任务,如果能使用硬盘访问量更少的算法,即使CPU计算量不变甚至略多一点,也会获得更好的性能。

性能优化技巧:有序分组

2020-12-25
阅读 2 分钟
1k
通常分组计算都采用 hash 方案,即先计算分组字段的 hash 值,hash 值相同的记录被分拣到一个小集合里,然后在这个小集合中遍历找分组字段值相同的聚合成一组。分组的复杂度 (比较次数),取决于 hash 函数的重码率。在 hash 空间比较小时,重码率就高,比较次数就会多,性能会受较大影响。为了提高性能,就需要分配较大...

性能优化技巧:后半有序分组 计算&AI

2020-12-03
阅读 2 分钟
1k
什么是后半有序?如果数据集T已经按字段a、b有序,现在我们要将T按b排序或分组时,因为在a值相同的段内,b都是有序的,这种要排序或分组的字段在分段内有序的情况就称为后半有序。

性能优化技巧:前半有序时的排序

2020-12-03
阅读 2 分钟
888
在对数据集进行排序运算时,有时会遇到这样一种场景:数据集T已经按字段a有序,而字段b无序,现在我们要将T按a、b排序,我们称之为前半有序(a有序)的排序。此时我们能想到一种优化的排序方法:从T中先取出a值相同的一组记录,再这一组内对b排序。然后再依次取出下一组a值相同的记录,重复这个动作,直到完成T中所有记录...

多层科目任意组合汇总表的性能优化

2020-06-05
阅读 3 分钟
1.3k
在实际的报表开发过程中,当我们遇到问题,往往并不能一开始就想到最优的解决办法。我们可以试着先用最简单、最容易的办法实现,然后再一步步进行优化;对比每种方案的存在的缺陷及改进后所带来的性能提升,从而最终满足业务需求。本文中我们就采用了这种方式,逐步优化的步骤如下:1、多次遍历方案;2、一次遍历方案;3...

集算器打开文件的时间不可忽略

2020-06-05
阅读 1 分钟
783
linux 打开组表文件的时间,实际测试要 10-20 毫秒。 主要原因是操作系统要按照目录去找文件。 所以性能要求非常严格的时候,要尽量减少文件的个数。

轻量级高性能文件型数据仓库

2020-06-05
阅读 7 分钟
1.6k
【摘要】数据仓库代表的是一种对数据的管理和使用的方式,它应当是一整套包括了 etl、数据管理、算法实现在内的完整的理论体系。但实际项目中的数据仓库总会存在不尽人意之处,比如数据源难以抽取、缺乏方便的目录管理、算法实现繁琐、计算性能低下、架构耦合性高。如何解决此类顽疾,请点击轻量级高性能文件型数据仓库...

从 TPCH 测试学习性能优化技巧之 Q22

2020-05-09
阅读 2 分钟
1.3k
Q22语句查询获得消费者可能购买的地理分布。本查询计算在指定的国家,比平均水平更持肯定态度但还没下七年订单的消费者数量。能反应出普通消费者的态度,即购买意向。

从 TPCH 测试学习性能优化技巧之 Q21

2020-05-09
阅读 3 分钟
1.6k
Q21语句的特点是:带有分组、排序、聚集、EXISTS子查询、NOT EXISTS子查询操作并存的四表连接操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

从 TPCH 测试学习性能优化技巧之 Q20

2020-05-09
阅读 2 分钟
1.1k
Q20语句查询确定在某一年内,找出指定国家的能对某一零件商品提供更有竞争力价格的供货商。所谓更有竞争力的供货商,是指那些零件有过剩的供货商,超过供货商在某一年中货运给定国的某一零件的50%则为过剩。

从 TPCH 测试学习性能优化技巧之 Q19

2020-04-24
阅读 2 分钟
1.3k
一、 查询要求 Q19语句查询得到对一些空运或人工运输零件三个不同种类的所有订单的总折扣收入。零件的选择考虑特定品牌、包装和尺寸范围。 Q19语句的特点是:带有聚集、IN子查询操作并存的三表连接操作。 二、 Oracle执行 Oracle编写的查询SQL语句如下: select  /+ parallel(n) /          sum(l_extendedprice * (1 - ...

从 TPCH 测试学习性能优化技巧之 Q18

2020-04-24
阅读 2 分钟
1.3k
Q18语句的特点是:带有分组、排序、聚集、IN子查询操作并存的三表连接操作。查询语句没有从语法上限制返回多少条元组,但是TPC-H标准规定,查询结果只返回前100行(通常依赖于应用程序实现)。

从 TPCH 测试学习性能优化技巧之 Q17

2020-04-24
阅读 2 分钟
876
Q17语句查询获得比平均供货量的百分之二十还低的小批量订单。对于指定品牌和指定包装类型的零件,决定在一个七年数据库的所有订单中这些订单零件的平均项目数量(过去的和未决的)。如果这些零件中少于平均数20%的订单不再被接纳,那平均一年会损失多少呢?所以此查询可用于计算出如果没有小量订单,平均年收入将损失多...

从 TPCH 测试学习性能优化技巧之 Q16

2020-04-24
阅读 2 分钟
978
一、 查询要求 Q16语句查询获得能够以指定的贡献条件供应零件的供货商数量。可用于决定在订单量大,任务紧急时,是否有充足的供货商。 Q16语句的特点是:带有分组、排序、聚集、去重、NOT IN子查询操作并存的两表连接操作。 二、 Oracle执行 Oracle编写的查询SQL语句如下: select  /+ parallel(n) /          p_brand,p...

从 TPCH 测试学习性能优化技巧之 Q15

2020-04-24
阅读 2 分钟
1.1k
Q15语句查询获得某段时间内为总收入贡献最多的供货商(排名第一)的信息。可用以决定对哪些头等供货商给予奖励、给予更多订单、给予特别认证、给予鼓舞等激励。

从 TPCH 测试学习性能优化技巧之 Q14

2020-04-24
阅读 1 分钟
937
一、 查询要求 Q14语句查询获得某一个月的收入中有多大的百分比是来自促销零件。用以监视促销带来的市场反应。 Q14语句的特点是:带有聚集、连接操作的简单查询。 二、 Oracle执行 Oracle编写的查询SQL语句如下: select  /+ parallel(n) /          100.00 * sum(                    case when p_type like 'PROMO%'  ...

从 TPCH 测试学习性能优化技巧之 Q13

2020-04-24
阅读 2 分钟
1.5k
一、 查询要求 Q13语句查询获得消费者的订单数量,包括过去和现在都没有订单记录的消费者。 Q13语句的特点是:带有分组、排序、聚集、子查询、左外连接操作并存的查询操作。 二、 Oracle执行 Oracle编写的查询SQL语句如下: select  /+ parallel(n) /          c_count,          count(*) as custdist from (          ...

从 TPCH 测试学习性能优化技巧之 Q12

2020-04-07
阅读 2 分钟
917
Q12语句查询获得货运模式和订单优先级。可以帮助决策:选择便宜的货运模式是否会导致消费者更多的在合同日期之后收到货物,而对紧急优先命令产生负面影响。