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

Problema de optimizacon tabla grande

Estas en el tema de Problema de optimizacon tabla grande en el foro de PostgreSQL en Foros del Web. HOLA TENGO UNA TABLA CON APROXIMADAMENTE UNOS 120.000 REGISTROS Y CON 92 CAMPOS. NECESITO HACER ESTE QUERY @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT   ...
  #1 (permalink)  
Antiguo 27/04/2010, 16:25
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Problema de optimizacon tabla grande

HOLA TENGO UNA TABLA CON APROXIMADAMENTE UNOS 120.000 REGISTROS Y CON 92 CAMPOS.

NECESITO HACER ESTE QUERY
Código SQL:
Ver original
  1. SELECT    sp.ciudad,sp.nombre_localidad AS localidad,
  2.                 sp.periodo,
  3.                 sp.nivsocio,
  4.                 to_char(SUM(sp.htotal),'999g999g999') AS htotal,
  5.                 to_char(SUM(sp.h0509),'999g999g999') AS h0509,
  6.                 to_char(SUM(sp.h1014),'999g999g999') AS h1014  
  7. FROM       servcon_poblaingas_76001 sp  
  8. WHERE    sp.codigo_localidad IN ('10') AND
  9.                 sp.periodo IN ('2007','2008','2009') AND
  10.                 sp.nivsocio IN ('3','4')
  11. GROUP BY sp.ciudad,localidad,sp.periodo,sp.nivsocio
  12. ORDER BY localidad,periodo,nivsocio

la primera ves que lo lance hiban mas de 3 minutos y nada que terminaba, le puse un indice

Código SQL:
Ver original
  1. CREATE INDEX idx_localidad_periodo_nivsocio ON servcon_poblaingas_76001 USING btree(codigo_localidad, periodo, nivsocio);

que se creo rapidamente y volvi a lanzar el query y se seguio demorando, despues quitando el indice me demore mas de 10 minutos.

Ensaye el query pero sin las sumas y se demoro maximo 96 milisegundos.

mi pregunta puntual es: como puedo obtimizar este query para que las sumas y los indices sea mas prudencial el tiempo de ejecucion.
  #2 (permalink)  
Antiguo 27/04/2010, 16:50
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Problema de optimizacon tabla grande

BUENO, LE PREGUNTE PREGUNTE A UNA COMPAÑERITA MUY PRESIOSA ELLA ACA EN LA OFICINA Y ME DIJO QUE COLOCARA EL INDICE APENAS CON EL CAMPO codigo_localidad Y SE DEMORO TAN SOLO 96 milisegundos.

DE TODOS MODOS me gustaria saber del porque con el indice compuesto fue tan terrible la busqueda.
  #3 (permalink)  
Antiguo 27/04/2010, 21:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema de optimizacon tabla grande

describe como tenías los campos indexados.
Eran llaves primarias?
La totalidad de los registros se repetian muchas veces con los campos indexados?

Con un poco mas de detalles podemos ver que puede estar pasando.

saludos amigo webness
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 27/04/2010, 22:03
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Problema de optimizacon tabla grande

la tabla como tal no tiene una llave primaria puesto que no es una tabla transaccional sino una tabla de consultas historicas, entonces estoy garantizando primero que la informacion que poseo alli es unica para cada registro, segundo no tengo claves foraneas debido a la gran cantidad de datos, no me interesa hacer join con otras tablas.

No todos los registros estan repetidos todos son diferentes, pero la combinacion de algunos de sus valores si estan repetidos puesto que encontramos valores de rangos de poblacion por edad, estrato, localidad,barrio, ciudad, todo esto por periodos (años), es decir que puedo tener un registro que indique que en bogota, para el barrio x de la localidad y para el estrato 4 hay un total de 56 mujeres de 20 a 24 años y asi encontramos registros para 15 años, de todos los barrios, de todas las localidades, con todos los estratos..... etc.

Espero haber sido claro acerca de la finalidad de la tabla.
  #5 (permalink)  
Antiguo 28/04/2010, 07:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema de optimizacon tabla grande

Por lo que decías en tu segundo post y la recomendación que te dió tu compañera (Muy buena), me hace pensar que los elementos indexados tienen muchos registros repetidos por lo que estos campos no son recomendables para el uso de indices.

El espacio y recursos que consume un indice es bastante y se debe hacer con un analisis previo de lo que se quiere lograr y si su uso va a ser reflejado positivamente en el rendimiento de la BD.

En pocas palabras, un indice se comporta como el indice real de un libro. Si uno va al indice de un libro y busca por palabra clave (Y solo hay una, o pocas), va a ser mucho mas fácil encontrar la pagina y la ubicación de lo que estamos buscando. Pero si en el indice, hay 500 repeticiones de la palabra clave, tendremos que hacer la búsqueda en 500 paginas para mirar cual es la pagina puntual que necesitamos.

SI viste un gran incremento en el rendimiento cuando pusiste el indice de solo el campo codigo_localidad muy seguramente este código se repite pocas veces (o una sola) en la
tabla y la búsqueda es optima. Pero al tener un indice compuesto que se puedan presentar muchas repeticiones, la búsqueda se puede tornar bastante lenta.

Saludos webness
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: grande, tablas
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 06:35.