No es que sean opiniones contrapuestas. Gnzsoloyo lo unico que dice es que no es un filtro. Para mi una condición y un filtro tienen un significado muy similar. Es mas, para definir condición, creo que utilizaría la palabra filtro.
Con respecto al comando explain este busca la mejor ruta de ejecución de la consulta y la muestra. Este proceso como lo describe gnzsoloyo lo hace con base en estadisticas de la tabla. Por lo que el siempre toma la información presente en
pg_stats para encontrar su mejor ruta.
Mira esta secuencia de comandos y compara explains.
Código SQL:
Ver originalpruebas=> CREATE TABLE prueba_explain(id INTEGER);
CREATE TABLE
pruebas=> SELECT relname,reltuples FROM pg_class WHERE relname='prueba_explain';
relname | reltuples
----------------+-----------
prueba_explain | 0
(1 fila)
pruebas=> INSERT INTO prueba_explain VALUES(8),(9),(10);
INSERT 0 3
pruebas=> SELECT COUNT(*) FROM prueba_explain;
COUNT
-------
3
(1 fila)
pruebas=> EXPLAIN SELECT *FROM prueba_explain;
QUERY PLAN
------------------------------------------------------------------
Seq Scan ON prueba_explain (cost=0.00..31.40 ROWS=2140 width=4)
(1 fila)
pruebas=> ANALYZE prueba_explain;
ANALYZE
pruebas=> SELECT relname,reltuples FROM pg_class WHERE relname='prueba_explain';
relname | reltuples
----------------+-----------
prueba_explain | 3
(1 fila)
pruebas=> EXPLAIN SELECT *FROM prueba_explain;
QUERY PLAN
--------------------------------------------------------------
Seq Scan ON prueba_explain (cost=0.00..1.03 ROWS=3 width=4)
(1 fila)
pruebas=>
Prueba actualizando las estadísticas de las tablas y acomodando las tuplas que no uses.
VACUUM ANALYZE.
Cuando dices que una tarda 4 segundos y la otra 18, que consulta te ofrece el mejor tiempo?
En mi caso, la segunda es mucho mas eficiente cuando hablamos de muchos registros. En tablas de pocos registros este tiempo es invisible.