Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Explain select -----

Estas en el tema de Explain select ----- en el foro de PostgreSQL en Foros del Web. HOLA A TODOS, TENGO LA SIGUEINTE CONSULTA: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT   sp . ciudad , sp . nombre_localidad AS localidad , ...
  #1 (permalink)  
Antiguo 25/05/2010, 11:17
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 3 meses
Puntos: 5
Explain select -----

HOLA A TODOS, TENGO LA SIGUEINTE CONSULTA:

Código SQL:
Ver original
  1. SELECT  sp.ciudad,sp.nombre_localidad AS localidad,sp.periodo,sp.nivsocio,
  2.     to_char(SUM(sp.htotal),'999g999g999g999') AS htotal,
  3.     to_char(SUM(sp.h0509),'999g999g999g999')  AS h0509,
  4.     to_char(SUM(sp.h1014),'999g999g999g999')  AS h1014,
  5.     to_char(SUM(sp.h1519),'999g999g999g999')  AS h1519,
  6.     to_char(SUM(sp.h2024),'999g999g999g999')  AS h2024,
  7.     to_char(SUM(sp.h2529),'999g999g999g999')  AS h2529,
  8.     to_char(SUM(sp.h3034),'999g999g999g999')  AS h3034
  9. FROM    servcon_poblaingas_11001 sp
  10. WHERE   sp.periodo IN ('2011') AND
  11.     sp.nivsocio IN ('2','3','4','5')
  12. GROUP BY sp.ciudad,localidad,sp.periodo,sp.nivsocio
  13. ORDER BY localidad,periodo,nivsocio

La cual se arma dinamicamente y se ejcuta sobre una tabla de 387315 registros y posee 94 columnas, la primera que lo ejecute en pgAdmin directamente en el servidor se tardo aprox 2 minutos, de resto su tiempo esta en un rago de 1.4 a 2 segundos, primera pregunta porque?

DESPUES hice un EXPLAIN DE ESE select y me arrojo lo siguiente:

Código SQL:
Ver original
  1. Sort  (cost=70587.03..70587.21 ROWS=73 width=59)
  2.   Sort KEY: nombre_localidad, periodo, nivsocio
  3.   ->  HashAggregate  (cost=70582.21..70584.77 ROWS=73 width=59)
  4.         ->  Seq Scan ON servcon_poblaingas_11001 sp  (cost=0.00..69937.59 ROWS=23441 width=59)
  5.              FILTER: ((periodo = 2011) AND (((nivsocio)::text = '2'::text) OR ((nivsocio)::text = '3'::text) OR ((nivsocio)::text = '4'::text) OR ((nivsocio)::text = '5'::text)))

pero no es que halla entendido de a mucho. que signfica todo eso, y con base en eso como podria modificarlo, para que sea mas rapido?

actualmente esta tabla tiene 2 indices, el de nivsocio y el de periodo, despues cree un indice compuesto de estos 2 pero el tiempo fue el mismo, pero nivsocio solo puede tomar 8 valores y periodo 10 valores, por lo tanto estos se repiten muchas veces en la tabla.

Última edición por webness; 25/05/2010 a las 11:21 Razón: Complemento
  #2 (permalink)  
Antiguo 25/05/2010, 11:36
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: Explain select -----

PARECE SER que justo en la primera ejecucion, el server estaba pegado, y que las consultas se guardan en una especie de cache, lo cual para posteriores ejecuciones hace que sea mas rapido.

por tal motivo cambie un poco el query, y el resultado siguio siendo rapido, por lo cual dedusxo que el server estaba pegado.

PERO SI ME GUSTARIA APRENDER A INTERPRETAR EL RESULTADO DEL EXPLAIN

Etiquetas: select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:01.