From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | "Viveros A(dot), Guillermo M(dot)" <gviveros(at)safp(dot)cl> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Consulta |
Date: | 2005-09-07 20:52:07 |
Message-ID: | 20050907205207.GD8250@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Wed, Sep 07, 2005 at 03:14:21PM -0400, Viveros A., Guillermo M. wrote:
Estimado Guillermo,
> Sin embargo, al modificar el query y poner el número entre apóstrofes,
> se tiene lo siguiente:
>
> [un recorrido de indice]
> que es lo que uno realmente esperaría.
>
> ¿Alguien me podría explicar cuando es necesario utilizar apóstrofes?
Cuando el tipo asignado al literal y el tipo de la columna no coinciden.
Los literales de numeros enteros que sean menores que INT_MAX (menores
que dos mil millones y fraccion), son clasificados como int4 (tambien
conocido como tipo INTEGER). Si el tipo de la columna no es INTEGER, el
optimizador decide que el tipo no coincide con aquel del indice, y no
puede usarlo; por lo tanto revierte a usar un recorrido secuencial.
Un literal entre comillas se clasifica de tipo "unknown". Esto permite
que el optimizador le ponga la etiqueta que le convenga, por eso puede
escoger int8 y por eso usa el indice.
Otra alternativa es reescribir la consulta usando un cast:
EXPLAIN SELECT count(*) from movi where cuen_numcue=1000829::<tipo>;
EXPLAIN SELECT count(*) from movi where cuen_numcue=cast(1000829 as <tipo>);
donde <tipo> es el tipo de la columna cuen_numcue, ya sea int8,
numeric, etc. Eso adorna el literal con el tipo apropiado, de modo que
el optimizador ya no cree estar lidiando con un int4 inapropiado.
Observa que en 8.0 ya no es necesario hacer esto, puesto que el
optimizador se volvio subitamente mas inteligente.
Saludos,
--
Alvaro Herrera -- Valdivia, Chile Architect, www.EnterpriseDB.com
"Los dioses no protegen a los insensatos. Éstos reciben protección de
otros insensatos mejor dotados" (Luis Wu, Mundo Anillo)
From | Date | Subject | |
---|---|---|---|
Next Message | Viveros A., Guillermo M. | 2005-09-07 21:30:17 | Re: Consulta |
Previous Message | Alvaro Herrera | 2005-09-07 20:44:18 | Re: Consulta toma 100 Minutos!!?? |