提高查询性能而不是聚合功能

时间:2017-08-18 07:13:58

标签: sql oracle performance aggregate-functions

我有查询,我想将SALES_DATE更改为' 01.01.2017'为产品的第一个记录。这意味着我希望获取存储在PRODUCT_ID中的每个独特产品,并检查加载产品的第一个SALES_DATE,并将此SALES_DATE更改为' {{1} }'

我已经使用了下面的查询,但它的效果似乎正在发挥作用。那么还有其他任何我可以编写相同的逻辑并提高性能吗?

01.01.2017

1 个答案:

答案 0 :(得分:1)

使用MERGE语句可以提高您的表现:

MERGE INTO test_group tgt
  USING (SELECT product_id,
                ROWID r_id,
                row_number() over (partition by product_id ORDER BY sales_date) rn
         FROM   test_group) src
    ON (tgt.rowid = src.r_id AND src.rn = 1)
WHEN MATCHED THEN
  UPDATE SET sales_date = to_date('01.01.2017', 'dd.mm.yyyy')
  WHERE sales_date != to_date('01.01.2017', 'dd.mm.yyyy');

在(product_id,sales_date)上添加索引(如果它还不存在)也应该有助于合并和原始更新语句的性能。