我是sql查询的新手。下面的sql查询要花近4分钟的时间才能运行,因为哪个页面停留了这么长时间。我们需要优化此查询,以使用户不会停留在那么长时间
请帮助优化。
我们正在使用oracle数据库
答案 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,
干杯!