Új hozzászólás Aktív témák

  • bpx

    őstag

    válasz dellfanboy #2336 üzenetére

    amikor futtatsz egy lekérdezést, ahhoz az adatbázis végrehajtási tervet készít, és az optimizer az összes lehetséges tervet megvizsgálja, és azokból választja ki a szerinte optimálisat
    ha mondjuk így néz ki az sql (Oracle), hogy:

    select /*+ ordered use_hash(tabla1 tabla2) */ oszlop1, oszlop2, ... from tabla1, tabla2, tabla3 ...

    akkor a /*+ ... */ közti "kommentek" valójában optimizer hintek, amivel befolyásolhatod hogy milyen terv készüljön
    az ordered azt jelenti, hogy a tábláknál a join sorrendje az lesz, ahogy le van írva az sql szövegében, és nem az adatbázis dönti el, tehát a fenti példában először veszi a tabla1-et, utána a tabla2-t, majd a tabla3-at
    a use_hash meg azt jelenti, hogy a tabla1-nél es tabla2-nél hash joint fog használni (míg a hint nélkül lehet, hogy nested loops join vagy merge join lenne)

    azt meg, hogy miért jó a fromba beágyazott select, nem tudom :D
    sokszor meg lehet oldani anélkül is, ha viszont kell, akkor meg van sokkal olvashatóbb módszer is: with .. as ..
    pl. (persze itt pont nem kell, meg az egyszerűsége miatt nincs is nagy különbség, de most ennyire telik tőlem):

    select * from ( select * from hr.employees where hire_date > date '2005-01-01') e2005
    where e2005.salary > 15000;

    with e2005 as (select * from hr.employees where hire_date > date '2005-01-01')
    select * from e2005 where e2005.salary > 15000;

Új hozzászólás Aktív témák