Re: implementacion de last() en el driver JDBC de postgresql

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)

In response to

Responses

Browse pgsql-es-ayuda by date

  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