From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Arturo Munive <arturomunive(at)gmail(dot)com> |
Cc: | Postgresql <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: implementacion de last() en el driver JDBC de postgresql |
Date: | 2007-05-31 18:42:42 |
Message-ID: | 20070531184242.GD18911@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Arturo Munive escribió:
> Hola a todos:
> En el proyecto en que trabajo (en java) estamos creando componentes
> personalizados para acceder a la base de datos.
>
> Un dato muy importante para esto es la cantidad de registros que
> devuelve una consulta.
Eso es lento, porque tiene que ejecutar la consulta en su totalidad para
poder contarlos. Si la consulta es costosa de ejecutar, o si retorna
200000 de registros y solo quieres los primeros 10 o 20, entonces vas a
pagar todo el costo de ejecucion solo para obtener un numero que en
realidad no sirve de nada.
Hacer un "select count(...) from ..." es igual de costoso (con la
diferencia que lo hace Postgres internamente, pero igual tiene que
ejecutar la consulta completa).
Para evitarse pagar costos innecesarios, hay varias ideas:
1. si necesitas cantidades muy exactas, almacena las cuentas en una
tabla aparte que mantienes con triggers (no de la manera trivial porque
sufriria mucha contencion en los UPDATEs)
2. si te sirven valores aproximados, puedes preguntarle al planner
cuantos registros cree que devolvera la consulta (como Google, que dice
"1-10 de aprox. 1000000", pero ellos nunca entregan resultados mas alla
de los primeros 1000)
--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
"Just treat us the way you want to be treated + some extra allowance
for ignorance." (Michael Brusser)
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2007-05-31 18:45:29 | Re: Trigger no se ejecuta al cambiar datos en una tupla cuando hay datos en determinada columna |
Previous Message | Arturo Munive | 2007-05-31 17:52:27 | implementacion de last() en el driver JDBC de postgresql |