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

Query con Inner Join muy tardado

Estas en el tema de Query con Inner Join muy tardado en el foro de SQL Server en Foros del Web. Hola, soy suuper novato en el foro, necesito de su ayuda si fuesen tan amables, tengo un query el cual necesito ejecutar para llenar una ...
  #1 (permalink)  
Antiguo 25/07/2012, 16:23
 
Fecha de Ingreso: julio-2012
Ubicación: Cuautitlan
Mensajes: 1
Antigüedad: 11 años, 8 meses
Puntos: 0
Query con Inner Join muy tardado

Hola, soy suuper novato en el foro, necesito de su ayuda si fuesen tan amables, tengo un query el cual necesito ejecutar para llenar una tabla y generar mi cubo sin embargo necesito todos los datos resultantes pero si hago eso, (osea sin WHERE) tarda muchisimo y nunca me regresa resultados, podrian audarme porfavor. Les muestro mi query para ver si alguien me podria ayudar en decirme que ando haciendo mal :

INSERT INTO PagoCajaMov SELECT B.keySolicitud,
B.numSolicitud,
C.keySucursal,
C.Sucursal,
E.keyAgrupacion,
F.Agrupacion,
D.keyFecha,
G.keyMedioPago,
A.Monto
FROM [EWF].[dbo].PagoCajaMov AS A
INNER JOIN DWH_GEN_SOLICITUDES AS B
ON A.num_solicitud=B.numSolicitud
INNER JOIN DWH_GEN_Sucursales AS C
ON A.cve_sucursal=C.cveSucursal
INNER JOIN DWH_GEN_FECHAS AS D
ON CONVERT(VARCHAR,A.fecha,112) = CONVERT(VARCHAR,D.Fecha,112)
INNER JOIN DWH_GEN_PRODUCTOS AS E
ON B.keyProducto =E.cveproducto
INNER JOIN DWH_GEN_AGRUPACIONPRODUCTOS AS F
ON E.keyAgrupacion = F.cveAgrupacion
INNER JOIN DWH_GEN_MEDIOPAGO AS G
ON A.mediopago=G.cveMedioPago



Saludos.
  #2 (permalink)  
Antiguo 26/07/2012, 00:28
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Query con Inner Join muy tardado

Las "buenas noticias" son que probablemente no hay errores de sintaxis en la recuperación,
pero las "malas noticias" son que es imposible encontrar los problemas de rendimiento asi sin tener las tablas, los datos, el plan de ejecución etc.

El problema es probablemente uno de los siguientes:
1. No existen indices aptos en las tablas y por lo tanto los Join son muy ineficientes.
2. Existen indices, pero la estadistica no esta actualizada.
3. En uno de las clausulas On falta una opción (And ..=..) y esto resulta en multiplicación cartesiana de filas.
4. Problemas en la tabla de destino o en los discos rigidos o en la memoria o con los tamaños de los archivos..

Yo trataría lo siguiente:
Empesaría con un Select de la primera tabla PagoCajaMov.
Despues Select de PagoCajaMov con la segunda tabla DWH_GEN_SOLICITUDES (Inner Join.. On ..).
Despues con la tercera etcetera,
y asi podria ver en que tabla empiesan las problemas de rendimiento o por el otro lado se crean filas dobles.

Despues yo echaría un vistazo en el plan de ejecución..

Espero que estos consejos te ayuden para empezar.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 26/07/2012, 14:42
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Query con Inner Join muy tardado

Otro punto a revizar es que si aplicas funciones a los campos, el optimizador no podria utilizar los indices que definas.. y se realiza un barrido a la tabla en cuestion.

En tu caso tienes dos campos fechas los cuales se convierte a varchar.. eso relentiza mucho el proceso..

CONVERT(VARCHAR,A.fecha,112) = CONVERT(VARCHAR,D.Fecha,112)


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Etiquetas: insert, join, query, select, tabla
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 09:27.