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 <alvhe...@2ndquadrant.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 >