Re: Tecnicas para mejora de eficiencia enconsultas

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Jose Luis Stragnari <jose(at)mulleryasociados(dot)com(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Tecnicas para mejora de eficiencia enconsultas
Date: 2007-09-06 16:59:21
Message-ID: 20070906165921.GG8709@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Jose Luis Stragnari escribió:
> Tu consulta no utilizará un índice, salvo que definas uno con un predicado NOT NULL
>
> Por ejemplo:
> CREATE INDEX clientes_telefono_ix ON clientes (telefono) WHERE telefono IS NULL

Ya entendí a qué se refería Jaime. En 8.3 sí se puede usar un índice
para esto. Ejemplo:

alvherre=# create table prueba_nulls (a int);
CREATE TABLE
alvherre=# insert into prueba_nulls select * from generate_series(1, 50000);
INSERT 0 50000
alvherre=# insert into prueba_nulls values (null);
INSERT 0 1
alvherre=# create index prueba_nulls_idx on prueba_nulls (a);
CREATE INDEX
alvherre=# analyze prueba_nulls ;
ANALYZE
alvherre=# explain analyze select * from prueba_nulls where a is null;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------
Index Scan using prueba_nulls_idx on prueba_nulls (cost=0.00..8.27 rows=1 width=4) (actual time=0.044..0.049 rows=1 loops=1)
Index Cond: (a IS NULL)
Total runtime: 0.141 ms
(3 lignes)

En cambio en 8.2 esta consulta no puede usar el índice. Repitiendo los
mismos pasos, lo que se obtiene al final es:

alvherre=# explain analyze select * from prueba_nulls where a is null;
QUERY PLAN
----------------------------------------------------------------------------------------------------------
Seq Scan on prueba_nulls (cost=0.00..771.01 rows=1 width=4) (actual time=16.042..16.046 rows=1 loops=1)
Filter: (a IS NULL)
Total runtime: 16.125 ms
(3 rows)

Por lo que tengo entendido, sistemas hechos como aficionados como Oracle
y otros no pueden usar indices en este caso ... tsk tsk ... cambiese a
Postgres, le cambiara la vida.

(Gracias a Teodor Sigaev por esta funcionalidad nueva en 8.3)

--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
We take risks not to escape from life, but to prevent life escaping from us.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Arturo Munive 2007-09-06 17:26:08 Re: Tecnicas para mejora de eficiencia enconsultas
Previous Message Jose Luis Stragnari 2007-09-06 16:30:51 RE: Tecnicas para mejora de eficiencia enconsultas