一、 问题背景与适用场景
在《性能优化技巧:有序归并》中我们验证了有序归并算法提高关联性能的效果,那么还有没有进一步提升的空间呢?能不能再减少数据的读取量从而再提速呢?
通常主子关联后还会再施加更多运算,比如过滤。有序归并算法将主子表先分别读出再做关联,当其中一个关联表被过滤后剩下记录少了很多时,另一个关联表也会有大量记录不能关联上,但做归并关联之前并不知道,仍然会将这些不可能关联上的数据读出,浪费了时间。
如果我们能根据被过滤表的主键去另一个表查找可被关联记录再来做关联,那样就能省去很多读取动作了。而由于组表是按键有序存放的,恰恰能使我们可以用键值高速定位记录,从而实现这个想法。
下面我们就做个测试,与常规有序归并对比一下,看看性能提升的效果,并在测试过程中进一步分析一下提速原理。
二、 测试环境
测试机有两个Intel2670 CPU,主频2.6G,共16核,内存128G,SSD固态硬盘。
采用TPCH标准生成的200G数据,主表是orders,子表是lineitem。两表中记录分别按O_ORDERKEY、L_ORDERKEY升序排列。因数据量比较大,单线程运行时间较长,所以使用4线程并行测试。
三、 主表有过滤
查询时对主表的过滤条件是O_TOTALPRICE>price,price是个参数,用来测试主表