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 Este es el plan generado "Nested Loop Left Join (cost=0.00..171837.52 rows=7658 width=70)" " Join Filter: ((btrim((inv.ruc)::text) = (p.ruc)::text) OR (btrim((inv.ruc)::text) = (((p.ruc)::text || '-'::text) || (p.digito_verificador)::text)))" " -> Nested Loop (cost=0.00..16.94 rows=3 width=66)" " -> Index Scan using unique_slug_ll on llamado lla (cost=0.00..8.38 rows=1 width=8)" " Index Cond: ((slug)::text = '286308-adquisicion-articulos-productos-limpieza-1'::text)" " Filter: publico" " -> Index Scan using idx_llamado_llamado_id on llamado_invitado inv (cost=0.00..8.51 rows=5 width=74)" " Index Cond: (llamado_id = lla.id)" " -> Seq Scan on proveedor p (cost=0.00..41938.25 rows=510325 width=12)" He creado indices a la tabla proveedor, para las columnas ruc y digito verificador, por separado, luego los cree juntos, incluso cree un campo que contenga ambas columnas pero el optimizador no utiliza el indice creado, en ninguno de los casos anteriores, como les dije, la idea es poder bajar esos 2,7 segundos que dura el select. mi tabla proveedor tiene alrededor de 520.000 reg. la tabla llamado invitado 1.300.000 reg. y la tabla llamado 289.053