[Pgsql-ayuda] Indices

Alberto Caso alberto.caso@adaptia.net
Fri, 03 Oct 2003 19:24:56 +0200


	Hola:

El jue, 02-10-2003 a las 18:31, Patricio Muñoz escribió:

> guia=# explain SELECT * FROM particular WHERE telefono ='0032353511';
> NOTICE:  QUERY PLAN:
> 
> Index Scan using telefono_idx on particular  (cost=0.00..68285.83 rows=20635
> width=172)
> 

	Como dice Álvaro, ¿realmente cada número aparece unas 20.000 veces?

> El segundo query
> guia=# explain SELECT * FROM particular WHERE telefono IN
> ('0032353511','0033353511','0034353511','0035353511');
> NOTICE:  QUERY PLAN:
> 
> Seq Scan on particular  (cost=0.00..89191.56 rows=81309 width=172)
> 

	Si te das cuenta, en el segundo caso, el coste por cada registro
devuelto es menor que el coste en la primera consulta (89191 de coste
para devolver 81309 registros en la segunda consulta frente a 68285 de
coste para devolver 20635 registros en la primera).

	Si las estimaciones que hace son realistas, hace bien en elegir el plan
que elige en el segundo caso.

	Cuando actualices a la 7.3.4 seguramente notarás que mejora y además el
ANALYZE nos permitirá ver si las estimaciones que hace sobre el coste
son correctas o no. Mientras tanto, ¿notas mucha diferencia de tiempo
entre una y otra consulta?

	Por otro lado, la versión 7.4 mejora mucho las operaciones IN(), pero
no sé si será sólo en el caso de los IN(subconsulta).

	Saludos.
-- 
Alberto Caso Palomino
Adaptia Soluciones Integrales
http://www.adaptia.net
alberto.caso@adaptia.net