Wpis z mikrobloga

Oracle 12.1c

1. Czy dodanie warunku WHERE ROWNUM <= 1 powoduje wykonanie zapytania w całości (tak jakby warunku nie było) ale finalnie zwraca tylko jeden rekord czy może zapytanie wykonuje się szybciej bo kończy po odnalezieniu pierwszego wyniku?

2. Czy podzapytanie wewnątrz WHERE EXISTS() wykonuje się w całości zanim funkcja zwróci TRUE (zakładamy że coś by znalazło) czy może odnajduje pierwszy lepszy rekord, kończy wykonywanie podzapytania i zwraca TRUE?

#oracle #plsql #bazydanych #sql
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@TomaszWKS: optymalizator z reguly jest nastawiony na uzyskanie szybszej odpowiedzi wiec po 1 rekordzie sie zakonczy

2) konczy po pierwszym odnalezionym
  • Odpowiedz
2) konczy po pierwszym odnalezionym


@ck__: To wytłumacz mi w takim razie dlaczego po dodaniu do podzapytania wewnątrz EXISTS warunku WHERE ROWNUM <= 1 koszt zapytania zmniejsza mi się drastycznie?
  • Odpowiedz
@AIRjordan @TomaszWKS Polecam zgłębić informacje o pseudokolumnie rownum https://blogs.oracle.com/oraclemagazine/on-rownum-and-limiting-results i czym jest koszt zapytania https://stackoverflow.com/questions/860450/understanding-the-results-of-execute-explain-plan-in-oracle-sql-developer
Nie jestem specem ale w Twoim przypadku (nie wiem jak wygląda całe zapytanie, które wykonujesz, jaka jest struktura tabel, indeksów, wolumen i rozmieszczenie danych) optymalizator kosztowy po prostu znalazł sobie plan do wykonania Twojego zapytania, który przy dodaniu warunku na rownum <= 1 ma mniej bloków do odczytu stąd koszt zapytania mniejszy. Nie widzę tu
  • Odpowiedz