Después de consultar especialistas en esta materia, programadores de deferentes ramas y profesores hemos dado con la respuesta al problema y la plasmamos en este post.
Solución:
Si quiere decir en psql, en lugar de algún programa que esté escribiendo, use ?
para la ayuda, y ver:
timing [on|off] toggle timing of commands (currently off)
Y luego obtienes una salida como:
# timing on
Timing is on.
# select 1234;
?column?
----------
1234
(1 row)
Time: 0.203 ms
Para fines de prueba, también puede utilizar EXPLAIN ANALYZE
.
Puede usarlo así para verificar si mi versión adaptada de su consulta es, de hecho, más rápida:
EXPLAIN ANALYZE
SELECT DISTINCT born_on.name
FROM born_on b
WHERE floor(('2012-01-30'::date - b.dob) / 365.25) <= (
SELECT floor((max(d1.dod - b1.dob)/365.25))
FROM born_on b1
JOIN died_on d1 USING (name)
)
AND NOT EXISTS (
SELECT *
FROM died_on d2
WHERE d2.name = b.name
);
Muestra el tiempo de ejecución total además del plan de consulta. Ejecute un par de veces para excluir artefactos.
Un par de opciones están disponibles para más detalles.
PostgreSQL no es Transact-SQL. Estas son dos cosas ligeramente diferentes.
En PostgreSQL, esto sería algo similar a
DO $proc$
DECLARE
StartTime timestamptz;
EndTime timestamptz;
Delta double precision;
BEGIN
StartTime := clock_timestamp();
PERFORM foo FROM bar; /* Put your query here, replacing SELECT with PERFORM */
EndTime := clock_timestamp();
Delta := 1000 * ( extract(epoch from EndTime) - extract(epoch from StartTime) );
RAISE NOTICE 'Duration in millisecs=%', Delta;
END;
$proc$;
Por otro lado, medir el tiempo de consulta no tiene por qué ser tan complicado. Hay mejores formas:
-
En el cliente de línea de comandos de postgres hay un
timing
función que mide el tiempo de consulta en el lado del cliente (similar a la duración en la esquina inferior derecha de SQL Server Management Studio). -
Es posible registrar la duración de la consulta en el registro del servidor (para cada consulta, o solo cuando duró más de X milisegundos).
-
Es posible recopilar el tiempo del lado del servidor para cualquier declaración individual usando el
EXPLAIN
dominio:EXPLAIN (ANALYZE, BUFFERS) YOUR QUERY HERE;
valoraciones y reseñas
Recuerda que puedes dar difusión a este tutorial si te valió la pena.