Ver Mensaje Individual
  #7 (permalink)  
Antiguo 27/10/2010, 10:27
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 16 años
Puntos: 360
Respuesta: duda con joins(¿cual de estas consultas es mejor?)

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 original
  1. pruebas=> CREATE TABLE prueba_explain(id INTEGER);
  2. CREATE TABLE
  3. pruebas=> SELECT relname,reltuples FROM pg_class WHERE relname='prueba_explain';
  4.     relname     | reltuples
  5. ----------------+-----------
  6.  prueba_explain |         0
  7. (1 fila)
  8.  
  9. pruebas=> INSERT INTO prueba_explain VALUES(8),(9),(10);
  10. INSERT 0 3
  11.  
  12. pruebas=> SELECT COUNT(*) FROM prueba_explain;
  13.  COUNT
  14. -------
  15.      3
  16. (1 fila)
  17.  
  18. pruebas=> EXPLAIN SELECT *FROM prueba_explain;
  19.                             QUERY PLAN
  20. ------------------------------------------------------------------
  21.  Seq Scan ON prueba_explain  (cost=0.00..31.40 ROWS=2140 width=4)
  22. (1 fila)
  23.  
  24.  
  25. pruebas=> ANALYZE prueba_explain;
  26. ANALYZE
  27.  
  28. pruebas=> SELECT relname,reltuples FROM pg_class WHERE relname='prueba_explain';
  29.     relname     | reltuples
  30. ----------------+-----------
  31.  prueba_explain |         3
  32. (1 fila)
  33.  
  34. pruebas=> EXPLAIN SELECT *FROM prueba_explain;
  35.                           QUERY PLAN
  36. --------------------------------------------------------------
  37.  Seq Scan ON prueba_explain  (cost=0.00..1.03 ROWS=3 width=4)
  38. (1 fila)
  39.  
  40. 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.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 27/10/2010 a las 10:42