【发布时间】:2018-01-11 21:33:57
【问题描述】:
这是架构:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
产品表包含有关制造商、型号和产品类型(“PC”、“笔记本电脑”或“打印机”)的数据。假定产品表中的型号对于所有制造商和产品类型都是唯一的。 PC 表中的每台个人计算机均由唯一代码明确标识,并通过其型号(外键指产品表)、处理器速度(以 MHz 为单位)-速度字段、RAM 容量(以 Mb 为单位)-ram 进行额外表征, 硬盘驱动器容量 (Gb) – hd, CD-ROM 速度 (例如, '4x') - cd, 以及它的价格。
现在,要求是找到同时生产具有最低 RAM 容量和最高处理器速度的 PC 的打印机制造商,这些 PC 具有最低 RAM 容量。
我写了这个查询:
WITH outp AS
(
SELECT
P.Maker, MAX(PC.Speed) AS Speed
FROM
PC
JOIN
Product P ON P.model = PC.Model
WHERE
P.maker IN (SELECT maker FROM Product WHERE type = 'Printer')
AND PC.Ram = (SELECT MIN(ram) FROM PC)
GROUP BY
Maker
)
SELECT maker
FROM outp
WHERE speed = (SELECT MAX(speed) FROM outp)
这是可行的,但我想优化这个查询或找到另一个比这更小的查询。有什么帮助吗?
谢谢大家...
【问题讨论】:
-
请运行
EXPLAIN PLAN FOR your_query,然后运行SELECT * FROM table( DBMS_XPLAN.Display ),然后将最后一个查询的结果复制为文本(不是位图),并将其附加到您的问题中(使用编辑选项)。
标签: sql oracle11g query-optimization common-table-expression