【发布时间】:2020-10-15 04:19:09
【问题描述】:
假设我有一个事务表
CREATE TABLE IF NOT EXISTS txn_raw (
transaction_id VARCHAR(60),
sport_label VARCHAR(300),
family_label VARCHAR(150),
item_label VARCHAR(150)
)
DISTKEY (the_transaction_id)
SORTKEY (the_transaction_id, sport_label, family_label, item_label)
;
COMMIT;
我想优化以下查询以计算项目之间的相关性。
SELECT
a.sport_label as sport_label_a,
a.family_label as family_label_a,
a.dsm_label as dsm_label_a,
b.sport_label as sport_label_b,
b.family_label as family_label_b,
b.dsm_label as dsm_label_b,
count(distinct a.the_transaction_id) as txn_ab
FROM txn_raw a
JOIN txn_raw b
on a.the_transaction_id=b.the_transaction_id
and a.sport_label != b.sport_label
and a.family_label != b.family_label
and a.item_label != b.item_label
group by 1,2,3,4,5,6
我正在考虑在加入 txn_raw 后创建一个临时表来存储数据。 然后查询临时表并进行分组。
有没有更好的方法来优化这种查询?
【问题讨论】:
-
您似乎已经有一个涵盖所有 4 列的索引。对吗?
-
请提供样本数据和期望的结果。
-
您应该查看并提供查询的解释计划和实际执行时间。既然你问了一个优化问题,我预计查询时间太长了。第一个问题是为什么。知道了这一点,接下来该做什么了。
标签: sql amazon-redshift query-optimization