SQL中的聚合——如何加速查询
Posted
技术标签:
【中文标题】SQL中的聚合——如何加速查询【英文标题】:Aggregation in SQL - how to accelerate query 【发布时间】:2021-04-15 12:49:35 【问题描述】:我有疑问,因为我想在查询中按月汇总所有指标,但是 加载数据的时间太长,还有另一种方法可以加速这个查询——意味着更快地返回数据?
SELECT
to_char(date, 'YYYY-MM') AS date_format_m,
/* to_char(cd.date, 'YYYY-MM-DD') AS date_format_d, */
client_id,
sum(impressions) as impressions,
sum(visits) as visits,
sum(conversions) as conversions,
sum(clicks) as clicks,
sum(tracked_cost) as tracked_cost,
sum(tracked_revenue) as tracked_revenue,
sum(conversions) as conversions,
sum(number_of_reports_queries) as report_queries,
sum(errors_total) as errors_total,
sum(traffic_log_requests) as traffic_log_requests,
sum(conversions) as conversions,
sum(campaigns_with_traffic) as campaigns_with_traffic,
sum(flows_with_traffic) as flows_with_traffic,
sum(paths_with_traffic) as paths_with_traffic,
sum(landers_with_traffic) as landers_with_traffic,
sum(offers_with_traffic) as offers_with_traffic
FROM
client_data
WHERE
date BETWEEN CURRENT_DATE - INTERVAL '180' DAY AND CURRENT_DATE
AND long_term_remaining_days > 0
GROUP BY
date_format_m, client_id
【问题讨论】:
Why should I "tag my RDBMS"? - 请添加标签以指定您使用的是mysql
、postgresql
、sql-server
、oracle
还是 db2
- 或其他完全不同的东西。跨度>
postgresql,我加了标签
“查询加载过多”是什么意思? --- 它返回什么你不想要的?列太多?行数太多?值太大?什么?
要“加速”查询,即更快地返回数据,请确保 client_data
表在 date
列上有索引。
请edit您的问题并添加使用explain (analyze, buffers, format text)
生成的execution plan(不是只是一个“简单”解释)为formatted text,并确保保留计划的缩进。粘贴文本,然后将```
放在计划前一行和计划后一行。还请包括所有索引的完整 create index
语句。
【参考方案1】:
您的查询可能需要处理大量数据,这就是它需要这么长时间的原因。当然,还有其他可能导致查询变慢,例如资源争用。
对于给定的查询,我认为client_data(date, long_term_remaining_days)
上的索引可能是查询的最佳索引。
【讨论】:
以上是关于SQL中的聚合——如何加速查询的主要内容,如果未能解决你的问题,请参考以下文章
hive 或 impala 中的计算表统计信息如何加速 Spark SQL 中的查询?
如何在 Teradata SQL 中使用 LEFT JOIN 对查询中的非聚合参数进行 GROUP BY?