Skip site navigation (1) Skip section navigation (2)

migración y join de tablas

From: FRANCISCO JOSE PALAO VILLANUEVA <fjpv_2000(at)yahoo(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: migración y join de tablas
Date: 2009-09-24 11:14:00
Message-ID: 324056.17262.qm@web24105.mail.ird.yahoo.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Hola soy fjpv_2000, estoy intentando hacer una migración de un sistema de base de datos a postgres (la migración ya la he hecho y todo funciona) pero me he encontrado con dos cositas que no se como resolverlas:
 
1) El ODBC no reconoce el parámetro LIMIT dentro de una select, me dice que no encuentra el token limit, lo he probado de muchas formas. ¿no está implemenetado?
 
2) El segundo problema es el que me trae más de cabeza. Es un problema de tiempo de respuesta cuando hago un join de dos tablas, me explico:
Tabla caberas(facturas) y Tabla detalles(facturas) hago una select de la siguiente forma:
 
select cabecera.*,detalles.* from cabecera,detalles where cabecera.id=detalles.id and cabecera.oficina=detalles.oficina and cabecera_fecha='03/03/2008' and cabecera.oficina=841.
 
Es decir, los datos de las facturas de la oficina 841 el día 03/03/2008 son en total 3178 rows y me las devuelve en 72975 ms. Este tiempo es inaceptable para mis clientes.
He probado a construir la query de formas diferentes, crear un view y lanzarla sobre el view y nada el tiempo más o menos el mismo. Tengo índices sobre los campos que se usan en query, tengo restricción de clave ajena de detalles sobre cabecera.
El planing siempre me hace lo mismo:
* hash join (cost=179468.18 .. 194039.39 rows=1898 with=158)
  hash Cond: (detalles.id=cabecera.id)
* index scan using av2 on cabeceras (cost=0.00 .. 124.64 rows=454 with=104)
  index Cond: (fecha='2008-03-03'::date)
  filter: (cabecera.oficina=841)
* hash (cost=147263.31 .. 147263.31 rows=1446390 with=54)
     bitmap heap scan on detalles (cost=86772.43 .. 147263.31 rows=1446390 with=54)
     recheck Cond: (detalles.oficina=841)
 * bitmap index scan on  adv4 (cost=0.00..86410.84 rows=1446390 with=0)
   Index Cond:(detalles.oficina = 841)
 
Es decir, primero trata la tabla detalles (más grande) y después enlaza resultados con cabecera (pequeña). ¿Hay alguna forma de que trate la de cabeceras y con su resultado enlace con la de detalles? ya que si cada vez tiene que tratar así los resultados nunca serán optimos.
 
Comparativa de tiempos sistema actual (rbase) : 5 segundos y postgresql sobre el mismo equipo 72975 ms (DIFERENCIA BRUTAL).
 
Creo que he probado todas las combinaciones de work_mem, default_statistics, effective_cache ,... que he ido leyendo en Internet. ¿alguna sugerencia o ayuda?
saludos y gracias
 


      

Responses

pgsql-es-ayuda by date

Next:From: Rafael MartinezDate: 2009-09-24 12:23:30
Subject: Re: migración y join de tablas
Previous:From: XaviDate: 2009-09-23 17:47:57
Subject: Unificar la codificación en el log.

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group