PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wydajność PostgreSQL - funkcja SELECT vs Stored

Planista ma problem z Twoim zapytaniem, ponieważ nie może oszacować czasu wykonania funkcji. W tym przypadku planista otrzymuje szacunkowy koszt wykonania funkcji, który można zdefiniować w create function... lub alter function... . Jeśli jednak spróbujesz tego zapytania:

explain analyse select * from test(10);

zobaczysz, że czas wykonania jest znacznie bardziej realistyczny.

Porównaj:

test=# explain analyse select test(1000);
                                        QUERY PLAN
------------------------------------------------------------------------------------------
 Result  (cost=0.00..5.25 rows=1000 width=0) (actual time=0.830..1.220 rows=1000 loops=1)
 Planning time: 0.038 ms
 Execution time: 1.250 ms
(3 rows)

kontra:

test=# explain analyse select * from test(1000);
                                                   QUERY PLAN
----------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..37.42 rows=1000 width=4) (actual time=0.006..0.124 rows=1000 loops=1)
   ->  Seq Scan on test_table  (cost=0.00..2560.28 rows=68428 width=4) (actual time=0.005..0.102 rows=1000 loops=1)
 Planning time: 0.130 ms
 Execution time: 0.144 ms
(4 rows)


test=# explain analyse select * from test_table limit 1000;
                                                    QUERY PLAN
------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..37.42 rows=1000 width=269) (actual time=0.009..0.118 rows=1000 loops=1)
   ->  Seq Scan on test_table  (cost=0.00..2560.28 rows=68428 width=269) (actual time=0.008..0.097 rows=1000 loops=1)
 Planning time: 0.076 ms
 Execution time: 0.151 ms
(4 rows)

Zwróć uwagę na podobieństwo dwóch ostatnich planów. Funkcje tabelowe (funkcje, które zwracają zestaw wierszy lub tabelę jak w tym przypadku) powinny być wywoływane w FROM klauzula. Pod pewnymi warunkami mogą być inline.

Przeczytaj więcej:Wstawianie funkcji SQL .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje sposób na indeksowanie w postgresie w celu szybkiego wyszukiwania podciągów?

  2. Konwertuj strefę czasową UTC w postgresql na EST (czas lokalny)

  3. Jak ustawić domyślny schemat w Yii2

  4. Nieoczekiwane wyniki zapytania SQL ze znacznikami czasu BETWEEN

  5. Pandy zapisują ramkę danych do innego schematu postgresql