Irek
Słonina
programowanie, bazy
danych i linuksy
Temat: [Oracle11g] Podzapytanie w JOINie przeliczane ponownie...
Oracle 11g.Mam taki kod:
SELECT
kol1, kol2
FROM jebucko_duzo_danych a
JOIN tu_tez_niemalo b ON (a.klucz1=b.klucz1)
czas wykonania: 0.1s
który sobie łączę w joinie:
SELECT kol1, kol2, ccc
FROM bardzo_duza_tabelka bdt
LEFT JOIN (
SELECT
kol1, kol2
FROM jebucko_duzo_danych a
JOIN tu_tez_niemalo b ON (a.klucz1=b.klucz1)
) xxx ON (bdt.kol1 = xxx.kol1)
czas wykonania: 40s
jesli dla testu sobie to pierwsze, małe zapytanie zmaterializuje:
create materialized view widok_material
AS
SELECT
kol1, kol2
FROM jebucko_duzo_danych a
JOIN tu_tez_niemalo b ON (a.klucz1=b.klucz1)
i przerobię to problemowe zapytanie na:
SELECT kol1, kol2, ccc
FROM bardzo_duza_tabelka bdt
LEFT JOIN widok_material ON (bdt.kol1 = xxx.kol1)
czas wykonania: 2s
^^^ ten czas jest bardzo przyzwoity jak na moje potrzeby.
Mój skromny wniosek: Oracle przelicza małe to podzapytanie
dla każdego wiersza, z którym jest złączany.
Pytanie konkursowe: jak kazać Oracle'owi żeby wykonał
to tylko raz? Są na to jakieś magiczne zaklęcia?