Re: Optimizar consulta

From: Diego Ayala <netdiego81(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: Postgres Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Optimizar consulta
Date: 2015-04-20 15:03:55
Message-ID: CANDf+nAK0DkBDHAk1eaEuwmTm12bSNy1FUvmqTgyEqRKJYquLQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Justamente, ese es el problema, el campo RUC es un campo character para
ambas tablas (invitado y proveedor) debido a que por ciertas cuestiones de
proveedores se tienen registros con valores del tipo character ej
(X-18575, E-4567), por lo tanto se debio utilizar ese tipo de dato para
almacenar el RUC. el OR se agrego atendiento que, el campo RUC en la tabla
invitado se puede realizar o no la carga del digito verificador, por lo
tanto habia que verificar esa situacion.

Gracias por la respuesta.

El 20 de abril de 2015, 10:43, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
escribió:

> Diego Ayala escribió:
> > Buenos dias, me gustaria saber si existe alguna forma de optimizar esta
> > pequeña consulta que tengo, ya que el tiempo de duracion del mismo es de
> > casi 2,7 seg., me parece que es bastante, ya que sera un consulta
> bastante
> > usada por diferentes usuarios, por lo tanto quisiera saber que hacer.
> > Es un select que devolvera el listado de invitados a participar de una
> > licitacion, pero que se debe validar previamente si existe en una tabla
> de
> > registro de proveedores, por eso el LEFT JOIN.
> >
> > SELECT
> > inv.id,
> > inv.nombre AS razon_social,
> > COALESCE(p.ruc || '-' || p.digito_verificador, p.ruc) AS ruc,
> > inv.telefonos AS telefono,
> > inv.email,
> > COALESCE(p.sipe,false) AS _sipe
> > FROM llamado_inv.llamado_invitado inv
> > INNER JOIN llamado.llamado lla ON lla.id = inv.llamado_id
> > LEFT JOIN provedor.proveedor p ON TRIM(inv.ruc) = p.ruc
> > OR TRIM(inv.ruc) = (p.ruc || '-' || p.digito_verificador)
> > WHERE lla.slug = '286308-adquisicion-articulos-productos-limpieza-1'
> > AND lla.publico = TRUE
>
> Sí, 2,7 segundos para esta consulta es grosero.
>
> Creo que tu problema es que las condiciones en RUC son muy feas. Quita
> el dígito verificador (en realidad no necesitas almacenarlo), almacena
> el número del RUC en un campo numérico (integer) y haz JOINs normales.
> Nada de TRIM(). ¿Por qué el OR?
>
> --
> Álvaro Herrera http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2015-04-20 15:11:52 Re: Optimizar consulta
Previous Message Alvaro Herrera 2015-04-20 14:43:01 Re: Optimizar consulta