Hirdetés

Keresés

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

  • bambano

    titán

    válasz bpx #2609 üzenetére

    persze, hogy nincs különbség, ha a limites átírásoddal pontosan azt a részt teszed tönkre, ami a lényegi különbség a két lekérdezés között.

    próbáld ki ezt a két lekérdezést:

    SELECT /*+ GATHER_PLAN_STATISTICS */ * FROM (SELECT
    aru_nev,aru_egysegar FROM aruk ORDER BY aru_egysegar DESC) aruk_kivonat
    where rownum < 4 ORDER BY aruk_kivonat.aru_egysegar ASC

    és

    SELECT /*+ GATHER_PLAN_STATISTICS */ * FROM (SELECT
    aru_nev,aru_egysegar FROM aruk where rownum<4 ORDER BY aru_egysegar DESC) aruk_kivonat
    ORDER BY aruk_kivonat.aru_egysegar ASC

    ez csak abban az egy esetben lehet ugyanolyan eredményű, ha az oracle képes olyan mélyen értelmezni a lekérdezést, hogy a külsö selectben használt where rownum<4 klauzát képes bevinni a belső selectbe.

    adjon valaki hitelt érdemlő bizonyítékot, hogy az a query, ahol a belső select 1 millió sort ad vissza, ugyanannyi idő alatt lefut és pontosan ugyanannyira optimális, mint az, ahol a belső select csak 3 sort ad vissza.

    szerk: illetve futtasd le a subselecteket önmagában és nézd meg a találati halmaz nagyságát.

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