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.
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 |