使用Sum和其他聚合函数进行Teradata SQL调优

时间:2015-10-01 00:19:11

标签: sum left-join aggregate-functions teradata sql-tuning

我有一个像

这样的查询
    sel
tb1.col1,
tb4.col2,
(case WHEN t4.col4 in (<IN LIST with more than 1000 values!>) then T4.Col7 
Else "Flag" ) as "Dcol1",
Sum ( tb3.col1),
sum (tb3.col2 ),
sum (tb2.col4)
etc
from
tb1 left outer join tb2 <condition> LOJ tb3 <conditions>
where tb1 condition and tb2 condition and tb3 condition

group by ( case <condition> , colx.tb2,coly.tb1

问题是TB3和TB4是巨大的事实表。事实表的PI未包含在此处的连接或查询中。

到目前为止我做了什么

创建一个易失性表(IN LIST的pi相同)并尝试实现。 VT1将SAME PI作为TB4,并在where子句中包含IN LIST。我喜欢这个方法

select
       ....
       CASE WHEN Dtb1.c1 IS NOT NULL 
            THEN ft."CustomColumName" 
            ELSE  'ALL OTHER' 
       end as "CustomColumName" 
    from "Db"."FACTTablew5MillionRows" as ft
    left join VolatileTable Dtb1 
    on Dtb1.c1=ft.C1

我如何优化这些类型的查询 假设tb3和tb2是巨大的事实表。 PI TB3为C4,c6和tb2的PI为C6,C7 TB3有一个分区列Cp,但不用于任何类型的where子句。它被用在其中一个连接中 他们没有相同的PI,但可能在他们的PI中有一个共同的列 TB3的行数约为80亿行,为6000万行。 如果没有假脱机,原始查询将无法运行。幸运的是晚上可以使用80K Impact C.我可以在&lt;中运行查询。 200仅在创建具有与tb2相同的PI的VT2之后,然后使用它进行连接。 我不想创建一堆VT用于知道蹲下TD的BO用户。我可以做些什么来使这个Q更好

0 个答案:

没有答案