From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Inquietud sobre Count() |
Date: | 2006-01-17 17:43:37 |
Message-ID: | 20060117174336.GC4296@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Gregorio Diaz escribió:
> Existe algo mejor para determinar el numnero de registros en una
> tabla?
En general si; hay varias maneras. Depende de si lo que quieres es una
cuenta exacta, o si te basta con una aproximacion. En este ultimo caso,
lo que se sugiere a veces es hacer un ANALYZE y luego pedirle al
optimizador que te entregue un plan de ejecucion de seqscan para esa
tabla (EXPLAIN); dentro del plan viene la estimacion de la cantidad de
tuplas para esa tabla. Incluso puedes usar condiciones WHERE, si la
distribucion se parece a una normal, uniforme, etc (si los datos tienen
"mala" distribucion, esto dara malos resultados para algunos casos por
razones que deberian ser obvias).
Si no te basta con una aproximacion, lo mas frecuente es usar triggers
para mantener la cuenta en una tabla aparte. Para que funcione bien en
forma concurrente, se sugiere usar una tabla que almacene un "total" y
ademas "deltas"; cada vez que haces un cambio en la tabla principal,
agregas un delta a esa tabla. Cuando quieres una cuenta total, tomas el
total y le sumas/restas los deltas. Y de vez en cuando (digamos una vez
al dia o como sea), tomas todos los deltas, los sumas, los guardas como
total y los borras.
> Porque Count no usa los indices o algo asi ?
Por razones de MVCC. Es mucho mas costoso de lo que parece.
--
Alvaro Herrera http://www.PlanetPostgreSQL.org
"Siempre hay que alimentar a los dioses, aunque la tierra esté seca" (Orual)
From | Date | Subject | |
---|---|---|---|
Next Message | Carlos Alberto Márquez Rey | 2006-01-17 19:07:47 | Re: UPdate en tabla con relacionamiento compartido |
Previous Message | al979663 | 2006-01-17 16:50:02 | Obtener host conectados |