【发布时间】:2021-10-27 07:38:52
【问题描述】:
我需要计算表格的统计数据。我写了下一条SQL:
SELECT
DISTINCT ("region"),
COUNT(*) as total,
COUNT(*) FILTER(WHERE t1.insert_status = 'success' AND t1.insert_status = 'success') as completed,
COUNT(*) FILTER(WHERE t1.insert_status IS NULL AND t1.insert_status IS NULL ) as waiting,
COUNT(*) FILTER(WHERE t1.insert_status = 'failed' ) as insert_failed
FROM xml_files t1
WHERE t1.section_name='payments'
AND processed_date >='2010-07-28' AND processed_date <='2021-08-28'
group by region
我的表太大(5000 万行)并且需要太多时间才能得到结果的问题。有没有办法优化这个查询?
有哪些可能的优化方式?
【问题讨论】:
-
您的查询缺少
WHERE子句。并且t1没有定义。 -
与您的问题无关,但是:
distinct不是函数。它始终适用于选择列表中的所有列。用括号括住其中一列不会改变任何东西并且是无用的。distinct (a),b与distinct a,(b)或distinct a,b相同 - 与group by结合使用更没有意义
标签: sql postgresql query-optimization