PostgreSQL - Consulta POSTGRESQL tarda demasiado

 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Consulta POSTGRESQL tarda demasiado

Publicado por Victor Rueda (2 intervenciones) el 08/09/2017 15:04:58
Hola foro,

Resulta que estoy haciendo un query que trae aproximadamente 1'200.000 registros y la consulta se está demorando demasiado.


Según analizo, el día de ayer salí del trabajo y dejé corriendo la consulta (corrió 7 horas seguidas y no había mostrado nada), hoy, al llegar al trabajo ya había terminado y mostraba que la consulta tardó 17 minutos. (creería que es un tiempo normal aunque me gustaría bajarlo más).

Analizando esto, encuentro que el problema no radica en la consulta sino al momento de mostrar los datos consultados.

La tabla Autorizaciones tiene 2.344.091 de registros y la tabla de Enlazadas tiene 3.603.719...

Este es el Query que ejecuto que me parece muy sencillo

1
2
3
4
SELECT T0."NumAutorizacion", T0."FechaAutorizacion", T0."Origen", T0."TipoDocumento", T0."DocumentoIdentidad", T0."PrimerNombre",
  T0."SegundoNombre", T0."PrimerApellido", T0."SegundoApellido", T0."CodigoMunicipio", T1."NitIpsAutorizada", T1."Factura"
FROM public."Autorizaciones" T0 LEFT JOIN public."Enlazadas" T1 ON T0."NumAutorizacion" = T1."Autorizacion"
WHERE T0."FechaAutorizacion" BETWEEN '20170101' AND '20170131'

La tabla autorizaciones tiene INDEX en FechaAutorizacion


¿Qué puedo hacer para aiumentar el tiempo de visualización de los datos?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta POSTGRESQL tarda demasiado

Publicado por martin (121 intervenciones) el 08/09/2017 17:35:45
NumAutorizacion y Autorizacion estan indexados? si son clave primaria en sus respectivas entidades deberian estarlo.
Tambien tene en cuenta que todos esos recursos que esta visualizando se cargan en memoria.

Por otro lado quien encesita ver ese listado? alguien se va a sentar a leer tupla por tupla? creeria que no, no en su sano juicio al menos.
Si es para hacer un dump, podrias probar con COPY y exportar a un CSV.

Y de muyyyy ultima crea una tabla a apartir de esa query y despues hace el select de esa nueva tabla que al no reliazar ni los joins ni los between va a listar mucho mas rapido, no se si ambas a la vez, si esa vista no cambia mucho, podrias manejar un tiempo con esa tabla.

1
2
3
4
5
CREATE TABLE mi_vista_estatica
AS
SELECT T0."NumAutorizacion", T0."FechaAutorizacion", T0."Origen", T0."TipoDocumento", T0."DocumentoIdentidad", T0."PrimerNombre", T0."SegundoNombre", T0."PrimerApellido", T0."SegundoApellido", T0."CodigoMunicipio", T1."NitIpsAutorizada", T1."Factura"
FROM public."Autorizaciones" T0 LEFT JOIN public."Enlazadas" T1 ON T0."NumAutorizacion" = T1."Autorizacion"
WHERE T0."FechaAutorizacion" BETWEEN '20170101' AND '20170131'

1
SELECT * FROM mi_vista_estatica;

Es lo unico que se me ocurre ahora.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 4
Ha disminuido 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Consulta POSTGRESQL tarda demasiado

Publicado por Victor Anibal (2 intervenciones) el 08/09/2017 21:41:53
Gracias, el NumAutorización si es primary pero autorización NO... Voy a hacer ese INDEX.


Duda, al ser AUTORIZACIONES una tabla particionada debo hacer los index a cada hija pero no a la tabla padre, verdad?


Igual probaré con la vista


UPDATE:
Miento, ya tienen index ya que autorización es FK... O ¿si es FK del padre debo crear los index en los hijos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta POSTGRESQL tarda demasiado

Publicado por martin (121 intervenciones) el 10/09/2017 16:44:51
Todo lo que uses en un join o WHERE tiene que estar indexado, si es FK o FPK seguro esta indexado, tambíen podrías crear una view de esa query, las vistas ya estan precompiladas y optimizadas con lo cual seguro te ahorras algunos segundos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar