执行时间慢

问题描述 投票:0回答:2

我请求添加新列,该列将计算记录中从 1 月到该月的名为 kode_buatan 的不同列(因此,如果记录的日期为 2024 年 3 月,则计算从 2024 年 1 月到 2024 年 3 月的不同 kode buatan),所以我进行了此查询

WITH coba1 AS (
  SELECT * FROM table_A
)
SELECT coba1.*, 
  (SELECT COUNT(DISTINCT kode_buatan) 
   FROM table_A sd 
   WHERE EXTRACT(MONTH FROM sd.date) <= EXTRACT(MONTH FROM coba1.date) 
     AND EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date) 
     AND sd.shipto = coba1.shipto) AS calculated_column_name
FROM coba1;

然后存在数据重复的问题,所以我添加了不同的数据,这使得执行时间变得很长(未完成)。有人可以给我一些提高查询性能的建议吗?谢谢你

我已经尝试过了

WITH coba1 AS (
  SELECT * FROM table_A
)
SELECT coba1.*, 
  (SELECT COUNT(DISTINCT kode_buatan) 
   FROM table_A sd 
   WHERE EXTRACT(MONTH FROM sd.date) <= EXTRACT(MONTH FROM coba1.date) 
     AND EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date) 
     AND sd.shipto = coba1.shipto) AS calculated_column_name
FROM

create table coba2 as (
select extract(year from date) as TAHUN, extract(month from date) as BULAN, shipto, (select count(distinct kode_buatan) from salesout_doi sd where extract(month from sd.date) <= extract(month from coba1.date) and extract(year from sd.date) = extract(year from coba1.date) and sd.shipto = coba1.shipto ) from salesout_doi_cobaaaytd coba1 where extract(year from date) = 2024
)

select distinct * from coba2
sql postgresql query-optimization
2个回答
0
投票

你不需要所有这些东西,我认为你的查询是错误的......

尝试:

SELECT coba1.*, COUNT(DISTINCT kode_buatan) AS calculated_column_name
FROM   table_A AS sd JOIN table_A AS coba1
       ON sd.shipto = coba1.shipto
       AND (EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date) 
            OR (EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date)
                AND EXTRACT(MONTH FROM sd.date) <= EXTRACT(MONTH FROM coba1.date) )
GROUP  BY coba1.*

将“coba1.*”替换为列名称的精确枚举...

获得更高性能的一种方法是在表中添加一个计算列,其中包含年份和月份的串联,格式为:YYYYMM


-1
投票

首先检查kode_buatan列是否有索引。 如果没有索引,您应该为该列创建一个新索引。

还建议使用显示执行计划来更好地优化您的查询。

© www.soinside.com 2019 - 2024. All rights reserved.