以下查询在time_histroy中为output_history中的每一行记录了最近的记录,记录的时间为20180101〜20180106。 但是要花一些时间才能得到实际情况。 实际情况是3个表,例如time_history,output_history,equip_type,它们具有很多行并且没有索引的行。 除了索引之外,是否还有查询调优的空间?(dbms:Oracle)
SELECT
o.equip,
o.model,
o.data1,
o.quantity,
t.data2,
t.time,
e.equip_type
FROM
output_history o
INNER JOIN equip_type e ON e.equip = o.equip
INNER JOIN time_history t ON t.equip = o.equip AND t.data2 <= o.data1
AND t.data2 >= '20180101' -- prevent from scanning all the output_history data2
WHERE NOT EXISTS (
SELECT 1
FROM time_history
WHERE
equip = o.equip
AND data2 <= o.data1
AND data2 > t.data2
AND data2 >= '20180101' AND data2 <= '2080106' -- prevent from scanning all the time_history data2
)AND o.data1 >= '20180101' AND o.data1 <= '20180106'