Hola Lista El hecho que se defina un indice sobre una columna no implica que este siempre se empleara en una consulta, El optimizador de PostgreSQL se basa en costos los cuales obtiene el Analizador generando entre otras variables un histograma de la distribución de los valores de las columnas, si un valor ( en este caso ACTIVO) corresponde a más del 20% aprox. de los registros de una tabla, el optimizador no optara por emplear el indice sino realizar un full scan sobre la tabla.
El 14 de marzo de 2014, 10:45, William Diaz Pabón<[email protected]>escribió: > Ok, gracias. > > Esta es la consulta con alias, espero que sea más legible: > > > SELECT > t.consecutivo AS tarifa, > cpp.oi_predio > FROM tarifa AS t > JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text = > t.consecutivo::text > > JOIN caracteristica_predio_oi_predio AS cpp ON > cpp.caracteristica_predio::text = cpt.caracteristica_predio::text > AND cpp.estado::text = 'ACTIVO'::text > AND (cpp.vigencia::text = ''::text OR > cpp.vigencia IS NULL OR > cpp.vigencia::text = t.vigencia::text) > WHERE t.estado::text = 'ACTIVO'::text > > El problema es que al ejecutar la consulta de demora mucho, y le pude los > indices que indique en el correo anterior, pero haciendo un explain no los > esta tomando y no se porque. > > Para la pregunta de Alvaro: Me imagino que la mayoría de los predios > están en estado ACTIVO, ¿es así? > > Pueden haber registros activos e inactivos, pero la gran mayoría debería > ser activos. > > > El 14 de marzo de 2014, 10:38, Alvaro Herrera > <[email protected]>escribió: > > William Diaz Pabón escribió: >> >> > SELECT >> > tarifa.consecutivo AS tarifa, >> > caracteristica_predio_oi_predio.oi_predio >> > FROM tarifa >> > JOIN caracteristica_predio_tarifa ON >> > caracteristica_predio_tarifa.tarifa::text = tarifa.consecutivo::text >> > >> > JOIN caracteristica_predio_oi_predio ON >> > caracteristica_predio_oi_predio.caracteristica_predio::text = >> > caracteristica_predio_tarifa.caracteristica_predio::text >> > AND caracteristica_predio_oi_predio.estado::text = 'ACTIVO'::text >> > AND (caracteristica_predio_oi_predio.vigencia::text = ''::text OR >> > caracteristica_predio_oi_predio.vigencia IS NULL OR >> > caracteristica_predio_oi_predio.vigencia::text = tarifa.vigencia::text) >> > >> > WHERE tarifa.estado::text = 'ACTIVO'::text >> >> Me imagino que la mayoría de los predios están en estado ACTIVO, ¿es >> así? >> >> PD: usa aliases en la cláusula FROM para que tus consultas sean más >> legibles. >> "FROM tarifa AS t JOIN ..." >> En la ensalada de letras de arriba es difícil hasta saber cuántas tablas >> están involucradas. >> >> -- >> Álvaro Herrera http://www.2ndQuadrant.com/ >> PostgreSQL Development, 24x7 Support, Training & Services >> > > > > -- > Éxitos. > > Cordialmente, > > > *William Diaz Pabón* > > *, Especialista en Soluciones Informáticas* > > Bogotá, Colombia > Tel: +57 (300) 3917774 > > http://planetapleno.blogspot.com/ > http://tutorialestecnicos.blogspot.com/ > -- Cordialmente, Ing. Hellmuth I. Vargas S. Esp. Telemática y Negocios por Internet Oracle Database 10g Administrator Certified Associate PostgreSQL DBA
