Re: Consulta no usa los indices

From: Hellmuth Vargas <hivs77(at)gmail(dot)com>
To: William Diaz Pabón <widipa(at)gmail(dot)com>
Cc: PostgreSQL Español Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta no usa los indices
Date: 2014-03-14 15:54:11
Message-ID: CAN3Qy4rsjQp+hjvHXmkdNat4d53LDpYm5oSkxff6hStfJ+F4Gg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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<widipa(at)gmail(dot)com>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 <alvherre(at)2ndquadrant(dot)com>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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2014-03-14 16:02:52 Re: Consulta no usa los indices
Previous Message raul andrez gutierrez alejo 2014-03-14 15:50:10 Re: Consulta no usa los indices