我需要启动和运行 SAS DI 作业时遇到巨大的性能问题。因此,我正在寻找优化工作的聪明方法。
我特别想到的一件事是,我或许应该改变一些连接和附加的顺序。目前,我的工作配置如下:
有几个类似结构的源表,我首先将日期过滤器应用于(以减少行数)并对两个字段进行排序,例如a
和b
,然后我将每个表连接到具有相同字段的帐户表的表a
和b
(如果可能的话,我想为这些创建索引,但不知道如何为 SAS DI 中的临时工作表创建索引)。在每个连接完成后,我将结果表附加到一个数据集中。
我突然想到我可以先追加,然后只做一个连接,但我不知道哪种方法更快,或者如果答案是它取决于我不知道它取决于什么(尽管我会猜测组成表的大小)。
那么,执行多个连接然后追加,还是追加然后执行一个连接更好?
编辑
这是一些相关信息的更新(由用户Robert Penridge请求)。
- 这里的源表数量为 7 个,这些表的大小在 1500 到 520 万之间。10 000 是典型的。列数为 25。这些表都与同一个表连接,该表大约有 5000 行和 8 列。
- 我估计唯一键将表划分为大小大致相等的子集;这里的大小减少应该在 8% 和 30% 之间(差异是由于一些源表比其他源表携带更多的历史数据,增加了分组到相同数量组的表的百分比)。
- 我已将列数限制为所需的最小数量(21)。
- 默认情况下,SAS DI 将所有临时数据集创建为视图,我没有更改它。
- 附加和连接的代码由 SAS DI 在使用 GUI 元素构建它们后自动生成。
- 最终数据集未排序;我对馈送连接的数据进行排序的原因是该链接关于连接性能的部分(第 35 页)提到它应该提高性能。
- 正如我所提到的,我不确定是否可以将索引放在 SAS DI 中的临时工作表或视图上。
- 我不能说这些字段的宽度是否大于绝对必要的,但如果是这样,我怀疑它是令人震惊的。我犹豫要不要更改它,因为它必须在多个表上手动完成,并且当新数据进入时,它可能需要额外的列宽。
非常感谢