sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL Performance - SELECT vs lagrad funktion

Planeraren har ett problem med din fråga eftersom den inte kan utvärdera exekveringstiden för funktionen. I det här fallet får planeraren den uppskattade exekveringskostnaden för funktionen, som kan definieras i create function... eller alter function... . Men om du försöker den här frågan:

explain analyse select * from test(10);

du kommer att se att exekveringstiden är mycket mer realistisk.

Jämför:

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)

Notera likheten mellan de två sista planerna. Tabellfunktioner (funktioner som returnerar rader eller tabeller som i det här fallet) ska anropas i FROM klausul. Under vissa förhållanden kan de infogas.

Läs mer:Inlining av SQL-funktioner .




  1. Hur man beräknar omvandlingsfrekvens i MySQL?

  2. SQLSTATE[23000]:Överträdelse av integritetsbegränsning:1452 Kan inte lägga till eller uppdatera en underordnad rad:en främmande nyckel-begränsning misslyckas

  3. mysql:använd SET eller många kolumner?

  4. Anslut MySQL-databas från Android