Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Obtener total de registros

Estas en el tema de Obtener total de registros en el foro de PostgreSQL en Foros del Web. Hola a todos! Mi consulta es simple: hay alguna otra forma de obtener el total de registros de una tabla, sin usar count(*) ? Tengo ...
  #1 (permalink)  
Antiguo 30/12/2010, 16:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Obtener total de registros

Hola a todos!

Mi consulta es simple: hay alguna otra forma de obtener el total de registros de una tabla, sin usar count(*) ? Tengo muchos registros y el count demora, me parece que se pasea por cada registro.

Gracias.
  #2 (permalink)  
Antiguo 30/12/2010, 20:57
 
Fecha de Ingreso: octubre-2010
Mensajes: 83
Antigüedad: 13 años, 5 meses
Puntos: 4
Respuesta: Obtener total de registros

Antes de responderte te pediria que menciones:
* version
* numero de registros
* resultado de explain analize
  #3 (permalink)  
Antiguo 31/12/2010, 07:57
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Obtener total de registros

* v. 8.3
* 5 500 000 registros
* EXPLAIN ANALYZE

"Aggregate (cost=103779.09..103779.10 rows=1 width=0) (actual time=824.399..824.399 rows=1 loops=1)"
" -> Seq Scan on tabla (cost=0.00..90029.67 rows=5499767 width=0) (actual time=0.067..502.756 rows=5500000 loops=1)"
"Total runtime: 824.468 ms"

Tengo una PC core i5 2GB RAM

El tiempo de respuesta es bueno, pero habra otro metodo mas rápido?, necesito saber la cantidad exacta

probe con esto
Código SQL:
Ver original
  1. EXPLAIN SELECT *FROM tabla;
  2. "Seq Scan on tabla  (cost=0.00..90029.67 rows=5499767 width=19)"
y el tiempo de respuesta es rápido (15ms) pero en la parte de "rows=" no está la cantidad exacta.

Gracias.
  #4 (permalink)  
Antiguo 01/01/2011, 20:24
 
Fecha de Ingreso: octubre-2010
Mensajes: 83
Antigüedad: 13 años, 5 meses
Puntos: 4
Respuesta: Obtener total de registros

El tiempo se puede considerar bueno con el hardware que posees y sabiendo que postgresql no esta dise#ado para hacer un SELECT count(*) sin un where. Esto pasa porque pg debe hacer un scan de la tabla para darte ese resultado. Eso ya ha sido discutido antes en las listas de correo, y la solucion con la que la mayoria concuerda es crear una tabla donde almacenes el total de registros y se actualize mediante un trigger.

Si encuentro el thread de la lista sobre el tema lo pongo aca.
  #5 (permalink)  
Antiguo 01/01/2011, 22:07
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Obtener total de registros

Hola goku2011,
Cita:
Iniciado por goku2011 Ver Mensaje
Hola a todos!

Mi consulta es simple: hay alguna otra forma de obtener el total de registros de una tabla, sin usar count(*) ? Tengo muchos registros y el count demora, me parece que se pasea por cada registro.

Gracias.
Hay un pequeño truco que tal vez te pueda servir, en vez de usar COUNT(*), usar COUNT(<Nombre de un sólo campo>).

Supon que tienes un campo clave primaria que se llama id, pues haces lo siguiente:
Código SQL:
Ver original
  1. SELECT COUNT(id) FROM tutabla;

Tal vez no te sirva, pero puedes probar a ver como te va.

Trata siempre de evitar el uso del "*", el "*" es un comodín que tiene un gran coste dentro de las bases de datos en general, hay mucha información sobre ello que puedes conseguir con "San Google".

Un cordial saludo.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]
  #6 (permalink)  
Antiguo 03/01/2011, 14:27
 
Fecha de Ingreso: diciembre-2010
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Obtener total de registros

Hice esto:
Código SQL:
Ver original
  1. SELECT COUNT(codigo) FROM tabla;
y es más lento que esto:
Código SQL:
Ver original
  1. SELECT COUNT(*) FROM tabla;
Tiempo de respuesta: 820ms y 712ms respectivamente.
Si le aumento un where se hace más lento aún (1774ms). No lo sé, me parecen muy lentos, que hago? me resigno con el tiempo de respuesta?

Habrá otra manera de obtener el numero de resultados de una consulta?
  #7 (permalink)  
Antiguo 03/01/2011, 15:50
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 10 meses
Puntos: 13
Respuesta: Obtener total de registros

Pues si no te sirve, podrias hacer una tabla índice que contenga dos campos:
Nombre de tabla | Número de registros y vas controlando los insert y delete sobre la tabla en cuestión, cada vez que se inserte vas incrementando en la tabla índice, y cada vez que borres decrementas, cuando hagas la consulta te vas a la tabla índice buscas el nombre de la tabla y desde ahí obtienes el número de registros, el inconveniente es tener completamente controlado el conteo de inserciones y eliminaciones sobre la tabla en cuestión para tener correctamente actualizado la tabla índice. Así como te digo una tabla podrias hacerlo sobre un archivo XML o de texto plano todo depende desde donde te interese buscar la información y para que tipo de aplicación lo utilices.

Un cordial saludo.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]

Etiquetas: registros, totales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:39.