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

Algo mas que no sea Count(*)

Estas en el tema de Algo mas que no sea Count(*) en el foro de SQL Server en Foros del Web. Que tal, hay alguna opciòn para conocer el numero de registros de una tabla mas eficiente o mas rápido? tengo una tabla donde al contar ...
  #1 (permalink)  
Antiguo 16/07/2010, 07:56
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 6 meses
Puntos: 3
Pregunta Algo mas que no sea Count(*)

Que tal, hay alguna opciòn para conocer el numero de registros de una tabla mas eficiente o mas rápido? tengo una tabla donde al contar los registros me devuelve mas de 50 mil, pero tarada algunos instantes, hay alguna manera de conocer el numero de datos mas ràpido?

Saludos y de antemano gracias!
__________________
Wow! No se que decir...
  #2 (permalink)  
Antiguo 16/07/2010, 08:03
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Algo mas que no sea Count(*)

Prueba asi:
Código SQL:
Ver original
  1. SELECT COUNT(1) FROM tutabla (NOLOCK)
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 21/07/2010, 10:43
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 6 meses
Puntos: 3
Pregunta Respuesta: Algo mas que no sea Count(*)

Hola gracias pro al respuesta, segùn lei, bàsicamente el NOLOCK cuenta los registros sin importar si algùn proceso se esta ejecutando en la BD lo que hace que con COUNT devuelva mas ràpido el resultado. si estoy equivocado corrijanme de favor y no hay otro modo? por que probandolo no hay diferencia en el tiempo :S
__________________
Wow! No se que decir...
  #4 (permalink)  
Antiguo 21/07/2010, 12:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 8 meses
Puntos: 180
Respuesta: Algo mas que no sea Count(*)

Con el permiso del master Flaviovich.

Si lees tu ayuda en linea, sabras que el NOLOCK, impide el BLOQUEO DE PAGINAS, esto es, que no haga un bloqueo al momento de estar leyendo tus paginas.
  #5 (permalink)  
Antiguo 21/07/2010, 13:35
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Algo mas que no sea Count(*)

Acabo de ejecutar la misma consulta sobre de una de las tablas mas pobladas de nuestro sistema y me devolvio 1925685 en 5 segundos.
Si a tu tabla tiene poco mas 50 mil registros y demora mas de 5 segundos, pues creo que el problema es otro, quizas servidor, falta de mantenimiento.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 22/07/2010, 09:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 6 meses
Puntos: 3
Exclamación Respuesta: Algo mas que no sea Count(*)

Halo, pues no tengo todavia tanta info, por ejemplo esto es lo que hago:

No. | Plantilla
12345 | Plantilla A
50102 | Plantilla B
13092 | Plantilla C
342 | Plantilla D
.
.
.
9401 | Plantilla X

Bàsicamente es una vista que me despliega el numero de registros que tiene cada tipo de plantilla en el sistema, entonces para obtener el no. de registros uso un PA haciendo esto:

Código PHP:
set @query N'Select count(1) from vw_DOC_DOCTOS_HDR vd (NOLOCK), sys_empresas em1 (NOLOCK)'+
                     
N'where (vd.CVE_EMPRESA = em1.CVE_EMPRESA And nt_docto='''+@plantilla+''' '+
                     
N'and vd.STATUS <> ''Publicado'' And vd.status <> ''Obsoleto'' '+
                     
N'and (ltrim(rtrim(Substring(vd.ui,1,1)))<>''M'') And exists'+
                     
N'(select cve_empresa from sys_empresas_tmp em '+
                     
N'where vd.CVE_EMPRESA = em.CVE_EMPRESA And serv_sesion = '''+@sesion+''' )) '
Son como unas 20 plantillas, la mayoria con menos de 5 mil registros pero unas cuantas tienen mas de 20 mil, la mayor es de 50 mil y esto crece rapidamente, actualmente tarda un minuto en despelgarme esa pantalla.

Tendran alguna sugerencia para mejorar esto? les agradecería mucho cualquier comentario!
__________________
Wow! No se que decir...
  #7 (permalink)  
Antiguo 22/07/2010, 09:41
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Algo mas que no sea Count(*)

Prueba asi:
Código SQL:
Ver original
  1. SELECT COUNT(1)
  2. FROM vw_DOC_DOCTOS_HDR vd (NOLOCK)
  3. INNER JOIN sys_empresas em1 (NOLOCK) ON vd.CVE_EMPRESA = em1.CVE_EMPRESA
  4. WHERE nt_docto = @plantilla
  5. AND NOT vd.STATUS = 'Publicado' AND NOT vd.STATUS = 'Obsoleto'
  6. AND NOT LEFT(ltrim(vd.ui),1) = 'M'
  7. AND EXISTS(
  8.     SELECT 1
  9.     FROM sys_empresas_tmp em
  10.     WHERE vd.CVE_EMPRESA = em.CVE_EMPRESA AND serv_sesion = @sesion
  11. )
Qué valores tienen tus variables? De repente no es necesario sql dinamico.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 22/07/2010, 10:15
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: Algo mas que no sea Count(*)

Hola lo probare ! gracias!

las variable de @plantilla es la que tiene la plantilla de la cual quiero saber el numero de registros que tiene, como puse arriba:

No. | Plantilla
12345 | Plantilla A

si le mando de parametro 'Plantilla A' deberà debolverme 12,325 registros,
y como tengo 20 plantillas se ejecuta 20 veces, pero ahora que lo pienso
deberìa intentar hacer que un solo query me devuelva todos los 20 resultados¿?
__________________
Wow! No se que decir...
  #9 (permalink)  
Antiguo 22/07/2010, 10:24
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Algo mas que no sea Count(*)

Y @sesion que valores guarda? Es decir, para que usas sql dinamico?
Lo de las 20 veces depende del uso que le quieres dar a la información.
Se supone que tienes un procedimiento almacenado bien definido, es decir que hace una tarea especifica.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #10 (permalink)  
Antiguo 22/07/2010, 11:29
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: Algo mas que no sea Count(*)

a la de sesion pues solo es la sesion del servidor, de hecho ese campo lo dejo solo por que asi lo crearon, io no hice el query que les mostre, asi estaba cuando llegue y en varios querys mas manejan esa variable, si se la quito igual funciona... Solo necesito desplegar un listado de plantillas con su numero de registros, pero si se me hace muy lento, que tarde un minuto e cargar :S
__________________
Wow! No se que decir...

Etiquetas: count, mas
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 06:39.