有什么办法可以优化下一个查询吗?

Is there any way to optimize next query?

我需要计算 table 的统计数据。接下来我写了 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

问题是我的 table 太大(5000 万行)并且花费了太多时间才能得到结果。有什么办法可以优化这个查询吗?

有哪些优化方式?

首先,您几乎不需要 select distinctgroup by。其次,您的查询有语法错误。

假设您打算:

SELECT 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
      t1.processed_date >='2010-07-28' AND t1.processed_date <='2021-08-28'        
GROUP BY region;

那么您需要 xml_files(second_name, processed_date, region, insert_status) 上的索引。