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

Problema con consulta SQL Lenta en seccion IN

Estas en el tema de Problema con consulta SQL Lenta en seccion IN en el foro de SQL Server en Foros del Web. Hola, tengo un problema con una consulta que se me pone muy lenta aproximadamente 20 segundos, me da un problema exactamente en el "and d.csu ...
  #1 (permalink)  
Antiguo 14/11/2011, 17:54
 
Fecha de Ingreso: abril-2006
Mensajes: 1
Antigüedad: 18 años, 7 meses
Puntos: 0
Pregunta Problema con consulta SQL Lenta en seccion IN

Hola, tengo un problema con una consulta que se me pone muy lenta aproximadamente 20 segundos, me da un problema exactamente en el "and d.csu in(253112513,253112514,253112515,253112516)" ya que si solo le paso un parametro o le quito ese and la consulta no tarda ni un segundo, la consulta es la siguiente:

SELECT D.CSU
FROM dbo.VW_USUA_CONTRATOS AS A
INNER JOIN dbo.VW_CONT_REC B ON A.ID_CONTRATO=B.ID_CONTRATO
INNER JOIN dbo.VW_PROYECTOS_EJECUCION D ON A.ID_CONTRATO=D.ID_CONTRATO
INNER JOIN dbo.VW_PLANEACION_HABILITA_POT_GENERAL E ON D.CSU=E.CSU
WHERE A.ID_USUARIO=1 AND A.ID_CONTRATO=184 AND
D.ID_ESTADO IN(1,2)AND D.ID_SUBPROYECTO=0 AND E.VIGENTE=1 and e.anio=2011 and d.csu in(253112513,253112514,253112515,253112516)
ORDER BY D.CSU asc


Abria alguna otra forma de incluir esos id para que me devuelva el resultado correcto y mas rapido?
  #2 (permalink)  
Antiguo 15/11/2011, 08:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Problema con consulta SQL Lenta en seccion IN

ya revisaste los indices de tus tablas?? ya revisaste el plan de ejecucion (ctrl+L en sql server)???

Prueba con esto

set statistics io on;
SELECT D.CSU
FROM dbo.VW_USUA_CONTRATOS AS A
INNER JOIN dbo.VW_CONT_REC B ON A.ID_CONTRATO=B.ID_CONTRATO
INNER JOIN dbo.VW_PROYECTOS_EJECUCION D ON A.ID_CONTRATO=D.ID_CONTRATO
INNER JOIN dbo.VW_PLANEACION_HABILITA_POT_GENERAL E ON D.CSU=E.CSU
WHERE A.ID_USUARIO=1 AND A.ID_CONTRATO=184 AND
D.ID_ESTADO IN(1,2)AND D.ID_SUBPROYECTO=0 AND E.VIGENTE=1 and e.anio=2011 and d.csu in(253112513,253112514,253112515,253112516)
ORDER BY D.CSU asc

set statistics io off;


y publica lo que te regresa ese query :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 15/11/2011, 10:48
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Problema con consulta SQL Lenta en seccion IN

Hola sergiosolid:

Al margen de las recomendaciones que Libras de hace, lo ideal sería que evitaras las comparaciones tipo IN pues estas son las más lentas en ejecutarse... veo que tu campo es numérico, pudieras intentar comparar por rangos...

Código:
...
d.csu >= 253112513 AND 
d.csu <= 253112516
Aunque esto implica necesariamente que los valores que buscas sean consecutivos... ¿tienes algún criterio para obtener estos cuatro elementos a buscar? es decir, ¿pueden surgir a partir de alguna consulta? si es así entonces podrías utilizar EXISTS en lugar de IN o inclusive tratar de hacer un JOIN. Checa los puntos que te comentó Libras, acerca de los índices y las estadísticas y nos comentas los resultados.

Saludos
Leo.

Etiquetas: parametros, sql
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 04:42.