请帮助优化查询

时间:2019-08-16 15:11:01

标签: sql oracle query-optimization

我是sql查询的新手。下面的sql查询要花近4分钟的时间才能运行,因为哪个页面停留了这么长时间。我们需要优化此查询,以使用户不会停留在那么长时间

请帮助优化。

我们正在使用oracle数据库

2 个答案:

答案 0 :(得分:1)

通过在aaa_soldto_xyz表中有2个预先计算的列,可以进行一些改进:

aaa_soldto_xyz.ID1 = Substr(aaa_soldto_xyz.xyz_id, 0, 6)

aaa_soldto_xyz.ID2 = Substr(aaa_soldto_xyz.xyz_id, 1, Length ( aaa_soldto_xyz.xyz_id) - 5) )

那些可以更好地利用现有或新索引。

答案 1 :(得分:0)

如果没有解释计划,我们将无法帮助您优化查询。

但是此查询中需要明显改善的地方是:从子查询(选择子句)中删除abc_customer_address表,并从列表中进行左联接并检查结果。

您需要更改以下条款。

From子句

Left join (SELECT ADDR.zip_code, 
ADDR.ID, 
ROW_NUMBER() OVER (PARTITION BY ADDR.ID ORDER BY 1) AS RN                                                     
FROM abc_customer_address ADDR                                                          
WHERE  ADDR.id = abc_customer.billing                                                              ) ADDR 
ON (ADDR.id = abc_customer.billing AND ADDR.RN = 1)

选择子句:

CASE WHEN abc_customer_address.zip_code IS NULL THEN ADDR.zip_code
ELSE abc_customer_address.zip_code 
END AS ZIP_CODE, 

干杯!