Temat: Full Scan - pytanie
Radosław Zyskowski:
Witam,
A w przypadku bind variables w zapytaniach to statystyki i histogramy przypadkiem nie maja znaczenia? W chwili wykonywania polecenia oracle nie zna rzeczywistej wartosci, wiec nie moze opierac sie na statystykach. Dlategóż azaliż oracle wprowadził nowy feature (po polskiemu zmora dibijeja) bind peeking. Czyli zasadniczo jakis baran barankiewicz wykonuje na bazie pierwszy raz zapytanie z kretyńskimi wartościami (a tak sobie sprawdze co sie stanie) wywołującymi full scana, i potem każde następne wykonanie ominie idealny index;).
Proponuje wyłączyć bind peeking, a w przypadku pojawienia sie zapytań z bindami które z racji wyliczania kosztu opieraja sie na fixed values, zapodać outline:)
Witam,
Statystyki i histy maja znaczenie. Bind peeking polega na przeczytaniu wartosci zmiennej i na tej podstawie i podstawie statystyk liczony jest plan zapytania. Masz racje jesli beda dziwne wartosci i pierwszy plan jest nieoptymalny to generalnie bedzie kiepsko.
Jakie jest rozwiazanie ? hmmm w 9i to faktycznie outline albo hint
albo unikanie bind dla wartosci ktore moga rozlozyc zapytanie.
Swoja droga fixed value oznacza dla warunku ze 5 % wierszy zostanie pobranych czyli dla
select * from tabela where id:=v_id - CBO zaklada zwrocenie 5 % wierszy i tak liczy plan
ale np dla
select * from tabela where id between :v_id1 and :v_id2 - CBO zaklada zgodnie z logika ze 0.05 * 0.05 = 0.0025 i zalozy
zwrocenie 0.25 % wierszy z tabeli
Dlatego z bindami trzeba ostroznie - a najlepsza odpowiedz
na to co jest lepsze bindy czy literaly - to odpowiedz - to zalezy ;)
pozdrawiam,
Marcin