如何在pgSQL中优化连接和子查询

时间:2018-03-28 17:22:37

标签: postgresql

我在PostgreSQL中有2个表,Schema ==> STS

  1. product_price_log包含product_name列(字符不同),K(数字),sale_date(日期)
  2. product_transaction包含product_name列(字符不同),price(数字),sale_date(日期)
  3. 我想获取sale_date = '2018-01-15' and '2018-01-01'的json数据。

    产品价格应来自product_price_log表格和product_transaction表中的销售数据,以便汇总报告。

    这是我的疑问:

    (SELECT 
        json_agg(j.*)
    from(
        select 
            a.sale_date, a.product_name, sum(a.quantity) as quantity, sum( a.quantity * b.price) as total_sale
        from(
            select
                sale_date, product_name, quantity
            from 
                sts.product_transaction p
            where 
            sale_date = '2018-01-15' or sale_date = '2018-01-01' and quantity > 0
        )a
        inner join (
    
            select * from(
              select product_name, price, sale_date from sts.product_price_log where sale_date <= '2018-01-15' order by sale_date desc limit 1
                union all
              select product_name, price, sale_date from sts.product_price_log where sale_date <= '2018-01-01' order by sale_date desc limit 1
            )a order by sale_date
    
        )r on (a.product_name = r.product_name and a.sale_date = r.sale_date)
        group by 
            sale_date,
            product_name
    )j)
    ;
    
    QUERY PLAN
    Aggregate  (cost=230444.51..230444.52 rows=1 width=28)
      ->  Subquery Scan on j  (cost=230290.98..230444.50 rows=1 width=28)
      ->  GroupAggregate  (cost=230290.98..230444.49 rows=1 width=20)
    

    如何降低时间成本或优化此查询?

0 个答案:

没有答案