由于事务表中的数据量太大,我们每天都会运行下面的查询,而且这个查询会运行3个小时左右。有什么方法可以优化这个查询或减少执行时间吗?
CREATE TEMPORARY TABLE t1 AS
SELECT DISTINCT EVENT_DATE FROM (
SELECT DISTINCT EVENT_DATE FROM mstr_wrk.cust_transation
WHERE load_date BETWEEN CAST(CAST('2019-03-05 04:00:31.0' AS TIMESTAMP) AS DATE) AND CURRENT_DATE() AND event_title = 'SETUP'
AND state != 'INACTIVE' AND mode != 'DORMANT') T
我试着减少减速机的数量来帮助加速,也试着启用矢量化但在这里运气不太好。我们在找泰兹。
2条答案
按热度按时间ljo96ir51#
重新设计表并使用索引。
例如,我会使用一个数字“state”列或枚举列,也会使用一个数字或枚举“event”列。这有助于生成有效的索引,而不是varchar或文本类型。
如果查询正在使用索引,索引可以显著提高查询速度。
不管怎样,我不知道表的结构和涉及的记录的数量,我只是猜测。。。
tquggr8v2#
不需要两次应用distinct
if表格
mstr_wrk.cust_transation
分区依据load_date
,分区修剪将不起作用,因为您正在使用函数。这将导致表满扫描。在shell脚本中计算日期并作为参数传递在参数化脚本之前,请检查此脚本性能