Tunning Query, использующий JOIN - PullRequest
       34

Tunning Query, использующий JOIN

0 голосов
/ 10 января 2019

В приведенном ниже запросе найдите самые последние записи в 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'
...