Select Count (0) ... ¡¡Lento y falso!!

28/03/2007 - 19:38 por Irak Rubio | Informe spam
Hola, me encuentro ejecutando una instruccion que me devuelva el total de
filas existente en una tabla x, para lo cual utilizo el Select count(0) As
TotFilas from MiTabla, el problema es que tarda demasiado en devolverme dicho
valor. Cabe mencionar que este proceso lo hago a través de mas de 500
servidores (con 24 tablas por cada servidor) en diferentes localidades de mi
país, y solo aproximadamente el 1 porciento de los casos se presenta esta
situación (160 diferentes tablas de diversas localidades), lo peor es que en
muchas ocasiones la instrucción me devuelve CERO registros, que es falso ya
que tras varios intentos, me regresa ya una cifra real. Esto no es todo el
universo, por lo cual sospecho que debe haber algun problema con los índices
de las tablas involucradas, pero en sí no estoy seguro de como funciona
internamente un Select count(0) como para poder encontrar una solucion
elegante a mi problema.

Saludos

Preguntas similare

Leer las respuestas

#1 Maxi
28/03/2007 - 19:51 | Informe spam
Hola, una lastima no saber que sql usar i que service pack tenes, pero
siempre el count(*) tardara dependiendo de la cantidad de registros, si
tenes SQL2005 podes usar las vistas dinamicas de sistema y no usar el
count(*) para sacar la cantidad de registros por tabla


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Irak Rubio" escribió en el mensaje
news:
Hola, me encuentro ejecutando una instruccion que me devuelva el total de
filas existente en una tabla x, para lo cual utilizo el Select count(0) As
TotFilas from MiTabla, el problema es que tarda demasiado en devolverme
dicho
valor. Cabe mencionar que este proceso lo hago a través de mas de 500
servidores (con 24 tablas por cada servidor) en diferentes localidades de
mi
país, y solo aproximadamente el 1 porciento de los casos se presenta esta
situación (160 diferentes tablas de diversas localidades), lo peor es que
en
muchas ocasiones la instrucción me devuelve CERO registros, que es falso
ya
que tras varios intentos, me regresa ya una cifra real. Esto no es todo el
universo, por lo cual sospecho que debe haber algun problema con los
índices
de las tablas involucradas, pero en sí no estoy seguro de como funciona
internamente un Select count(0) como para poder encontrar una solucion
elegante a mi problema.

Saludos
Respuesta Responder a este mensaje
#2 Victor Koch
28/03/2007 - 22:58 | Informe spam
Hola,

Aparte del consejo de Maxi tambien es bueno pegarle una leida a la ayuda, ya
que por lo que decis deberias usar COUNT(*) en vez de COUNT(0):

La función Count no cuenta registros que tengan campos Null a menos que
expresión sea el carácter comodín asterisco (*). Si utiliza un asterisco, la
función Count calcula el número total de registros, incluidos los que
contienen campos Null. Count(*) es considerablemente más rápido que
Count([Nombre de columna]). No escriba el asterisco entre comillas (' '). El
siguiente ejemplo calcula el número de registros de la tabla Pedidos:

SELECT Count(*)

AS TotalPedidos FROM Pedidos;

Un saludo, Víctor Koch.


"Irak Rubio" escribió en el mensaje
news:
Hola, me encuentro ejecutando una instruccion que me devuelva el total de
filas existente en una tabla x, para lo cual utilizo el Select count(0) As
TotFilas from MiTabla, el problema es que tarda demasiado en devolverme


dicho
valor. Cabe mencionar que este proceso lo hago a través de mas de 500
servidores (con 24 tablas por cada servidor) en diferentes localidades de


mi
país, y solo aproximadamente el 1 porciento de los casos se presenta esta
situación (160 diferentes tablas de diversas localidades), lo peor es que


en
muchas ocasiones la instrucción me devuelve CERO registros, que es falso


ya
que tras varios intentos, me regresa ya una cifra real. Esto no es todo el
universo, por lo cual sospecho que debe haber algun problema con los


índices
de las tablas involucradas, pero en sí no estoy seguro de como funciona
internamente un Select count(0) como para poder encontrar una solucion
elegante a mi problema.

Saludos
Respuesta Responder a este mensaje
#3 Salvador Ramos
29/03/2007 - 21:50 | Informe spam
Hola Victor,

Quería hacer una aclaración en cuanto a tu respuesta, en el caso del ejemplo
como indica el valor 0 cuenta todas las filas. No las cuenta en caso de que
se indique el nombre de una columna de la tabla y esa tenga valores null. Te
paso un ejemplo que aclara el tema:
create table prueba(num int)
insert into prueba values(null)
insert into prueba values(null)
insert into prueba values(1)
insert into prueba values(null)
select count(*), count(0), count(num) from Prueba
drop table prueba

En cuanto al problema que indica Irak, la verdad que nunca lo había oído,
sería interesante saber la versión y service pack utilizado, aunque no creo
que fallase una cosa tan básica.

Un saludo
Salvador Ramos

www.sqlserverymicrosoft.net (información sobre SQL Server y .NET)
www.sqlserverymicrosoft.net/acerca_de_salvador_ramos.htm
[SQL Server MVP]

"Victor Koch" <v i c t o r (arroba)correo(punto)waldbott(punto)com(punto)ar>
escribió en el mensaje news:%
Hola,

Aparte del consejo de Maxi tambien es bueno pegarle una leida a la ayuda,
ya
que por lo que decis deberias usar COUNT(*) en vez de COUNT(0):

La función Count no cuenta registros que tengan campos Null a menos que
expresión sea el carácter comodín asterisco (*). Si utiliza un asterisco,
la
función Count calcula el número total de registros, incluidos los que
contienen campos Null. Count(*) es considerablemente más rápido que
Count([Nombre de columna]). No escriba el asterisco entre comillas (' ').
El
siguiente ejemplo calcula el número de registros de la tabla Pedidos:

SELECT Count(*)

AS TotalPedidos FROM Pedidos;

Un saludo, Víctor Koch.


"Irak Rubio" escribió en el mensaje
news:
Hola, me encuentro ejecutando una instruccion que me devuelva el total de
filas existente en una tabla x, para lo cual utilizo el Select count(0)
As
TotFilas from MiTabla, el problema es que tarda demasiado en devolverme


dicho
valor. Cabe mencionar que este proceso lo hago a través de mas de 500
servidores (con 24 tablas por cada servidor) en diferentes localidades de


mi
país, y solo aproximadamente el 1 porciento de los casos se presenta esta
situación (160 diferentes tablas de diversas localidades), lo peor es que


en
muchas ocasiones la instrucción me devuelve CERO registros, que es falso


ya
que tras varios intentos, me regresa ya una cifra real. Esto no es todo
el
universo, por lo cual sospecho que debe haber algun problema con los


índices
de las tablas involucradas, pero en sí no estoy seguro de como funciona
internamente un Select count(0) como para poder encontrar una solucion
elegante a mi problema.

Saludos




Respuesta Responder a este mensaje
#4 Alfredo Novoa
30/03/2007 - 12:32 | Informe spam
On Wed, 28 Mar 2007 14:51:27 -0300, "Maxi"
wrote:

Hola, una lastima no saber que sql usar i que service pack tenes, pero
siempre el count(*) tardara dependiendo de la cantidad de registros, si
tenes SQL2005 podes usar las vistas dinamicas de sistema y no usar el
count(*) para sacar la cantidad de registros por tabla



¿Y en que vista está eso?

Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida