请帮助优化查询
Posted
技术标签:
【中文标题】请帮助优化查询【英文标题】:Please help to optimise the query 【发布时间】:2019-08-16 15:11:01 【问题描述】:我是 sql 查询的新手。下面的 sql 查询需要将近 4 分钟才能运行,因为哪个页面停留了这么长时间。我们需要优化这个查询,以便用户不会停留这么长时间
请帮助优化。
我们正在使用 oracle 数据库
【问题讨论】:
我们对您的数据或表结构或索引等一无所知。您应该从查看执行计划开始。您将旧式连接(逗号分隔的表)与 ANSI 连接混合在一起,这会让人难以理解并且可能会破坏事情,但也可能会使优化器感到困惑,因为它会限制可能发生的连接顺序;所以也许在你深入挖掘之前解决这个问题。 【参考方案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) )
那些可以更好地利用现有或新的索引。
【讨论】:
【参考方案2】:如果没有解释计划,我们无法帮助您优化查询。
但这个查询需要明显的改进是:从子查询中删除abc_customer_address
表(选择子句)并从列表中左连接并检查结果。
您需要更改以下条款。
从子句
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,
干杯!!
【讨论】:
Thnx Tejaash,我会检查 我已经更新了 from 子句。在 row_number 中添加了 partition by 子句。请使用最新的代码以上是关于请帮助优化查询的主要内容,如果未能解决你的问题,请参考以下文章