admin

在不使用易失性表的情况下优化Teradata中的巨大价值列表

sql

有一个类似的值清单

`where a.c1 in ( list ) `

然后将列表推入volatile表是最好的方法。但是,这是通过cognos完成的,并且IBM不够聪明,无法知道Teradata的volatile表是什么。我希望是这样,所以我可以使用排除逻辑Exists来浏览易失性表的内容。所以没有volatile
table,我有一个值列表 where a.c1 in ( list )
,它具有5K值。将该列表保留在报告中被证明是昂贵的。我想知道是否可以将这种列表存储在报表中之前的某个位置。CTE如何使用和存在于CTE上,将获得类似的收益。


阅读 177

收藏
2021-06-07

共1个答案

admin

您可以将列表作为字符串传递,然后将其拆分为表格,例如整数列表:

where a.c1 in
 (
   SELECT CAST(token AS INT)
   FROM TABLE (STRTOK_SPLIT_TO_TABLE(1, '1,2,3,4,5,6,7,8,9,5000', ',')
        RETURNS (outkey INTEGER,
                 tokennum INTEGER,
                 token VARCHAR(10) CHARACTER SET UNICODE)
              ) AS dt 
 )

当然优化器不知道返回的行数,所以最好检查一下Explain …

2021-06-07