[Oracle]优化一个查询包含一个最大子查询
Posted
技术标签:
【中文标题】[Oracle]优化一个查询包含一个最大子查询【英文标题】:[Oracle]Optimization a query contain a max subquery 【发布时间】:2016-01-05 07:44:13 【问题描述】:我想知道是否有办法根据该请求优化视图:
SELECT product ,
price ,
quantity_in_stock ,
location
FROM mytableA x
WHERE x.price =
(SELECT MAX( z.price )
FROM mytableA z
WHERE (z.quantity_in_stock > 0)
AND z.product = x.product
);
谢谢。
【问题讨论】:
【参考方案1】:使用分析函数(单表扫描)而不是相关子查询(两表扫描):
SELECT product,
price,
quantity_in_stock,
location
FROM (
SELECT product,
price,
quantity_in_stock,
location,
MAX( CASE WHEN quantity_in_stock > 0 THEN price END ) OVER ( PARTITION BY product ) AS max_price_in_stock
FROM MyTable
)
WHERE price = max_price_in_stock;
【讨论】:
嗨@Mt0,不幸的是,它增加了成本。之前是 15 595,然后是 21 780。以上是关于[Oracle]优化一个查询包含一个最大子查询的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 查询优化器是不是将*** where 子句应用于子查询或视图?