[Pgsql-ayuda] Ayuda con indice de campo TIMESTAMP

Alvaro Herrera alvherre@dcc.uchile.cl
Mon, 10 Nov 2003 14:14:32 -0300


On Mon, Nov 10, 2003 at 11:54:53AM +0000, mondino@solsoft.com.ar wrote:

>        explain select * from t_vtdeta where vh_feho>='17-10-2003 00:00:00'
> or vh_feho<='17-10-2003 23:59:59' order by vh_feho;
> 
> NOTICE:  QUERY PLAN:
> 
> Index Scan using tvtdeta_vhfeho on t_vtdeta  (cost=0.00..91877.39
> rows=186739 width=220)

Me sorprende esto, porque dada la condición que le das debería retornar
todas las tuplas de la tabla (la condición siempre es cierta).  Qué pasa
si usas AND en vez de OR?

> explain select * from t_vtdeta where cast(vh_feho as date)='17-10-2003'
> order by vh_feho;
> NOTICE:  QUERY PLAN:
> 
> Sort  (cost=10128.56..10128.56 rows=2047 width=220)
>   ->  Seq Scan on t_vtdeta  (cost=0.00..10016.00 rows=2047 width=220)

El planner no es capaz de usar el índice para resolver una consulta con
un tipo de dato distinto.

A todo esto, qué dice EXPLAIN ANALYZE en lugar de EXPLAIN?

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Aprende a avergonzarte más ante ti que ante los demás" (Demócrito)