sql >> Base de Datos >  >> RDS >> PostgreSQL

Rendimiento de PostgreSQL:función SELECCIONAR frente a función almacenada

El planificador tiene un problema con su consulta ya que no puede evaluar el tiempo de ejecución de la función. En este caso, el planificador obtiene el costo de ejecución estimado de la función, que se puede definir en create function... o alter function... . Sin embargo, si intenta esta consulta:

explain analyse select * from test(10);

verá que el tiempo de ejecución es mucho más realista.

Comparar:

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)

contra:

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)

Nótese la similitud de los dos últimos planos. Las funciones de tabla (funciones que devuelven un conjunto de filas o una tabla como en este caso) deben llamarse en FROM cláusula. Bajo ciertas condiciones, pueden estar en línea.

Leer más:Inserción de funciones SQL .