Szacuje 1000 wierszy
1000
Szacowane wiersze to domyślna wartość udokumentowana w CREATE FUNCTION
:
Gdy funkcja jest zadeklarowana jako ulotna, prosi o to, aby nie była wbudowana, więc ta domyślna wartość dla result_rows
trzyma.
Z drugiej strony, gdy jest on wbudowany w zapytanie, tak jak w drugim teście, liczba wierszy zostanie oszacowana tak, jakby ciało funkcji zostało przeniesione do zapytania, a deklaracja funkcji nie istniała. Prowadzi to w drugim teście do dokładnego oszacowania, ponieważ VALUES
klauzula może być oceniana bezpośrednio.
Co dokładnie robi tutaj planista i gdzie mogę przeczytać dokumentację na ten temat?
Zasadniczo strategie optymalizacji planisty nie są wyjaśnione w głównej dokumentacji. Są one omawiane na listach dyskusyjnych i wspominane w komentarzach do kodu źródłowego, które na szczęście bywają wyjątkowo przejrzyste i dobrze napisane (w porównaniu z przeciętnym kodem źródłowym). W przypadku funkcji inliningu wierzę w komentarze inline_set_returning_functions i inline_set_returning_function ujawnić większość zasad kierujących tą konkretną optymalizacją. (ostrzeżenie:powyższe linki prowadzą do bieżącej gałęzi głównej, która może ulec zmianie lub dryfować w dowolnym momencie).