Rendimiento de SubConsultas

02/11/2007 - 22:45 por Diego Romero | Informe spam
Hola
Como estan ?

Tengo una tabla donde esta toda la información del movimiento de artículos
de un inventario, asi:
Producto,Fecha,Tipo, Entrada, Salida,CostoEntradas,CostoSalidas
Ñ001,1/1/2007,ENT,100,0,1000000,0 (registro de entradas)
D1001,1/1/2007,SAL,0,10,0,100000 (registro de salidas)
D1001,2/2/2007,FCR,0,5,0,500000 (Registro de facturas)
D1001,2/2/2007,DFC,2,0,200000,0 (Registro de devolucion de facturas)

Necesito una consulta para ver el resumen de movimiento por producto, asi:
Producto,TotalEntradas,TotalSalidas,TotalCostoEntradas,TotalCostoSalidas,UnidadesVendidas,UnidadesDevolucionVentas

Cree una instrucción select utilizando un LEFT JOIN contra la misma tabla
para ver los totales de ventas:

SELECT T1.Producto,SUM(Entrada) as TotalEntradas,SUM( Salida) AS
TotalSalidas
,SUM(CostoEntradas) AS TotalCostoEntradas,SUM(CostoSalidas) AS
TotalCostoSalidas
,UnidadesVendidas,UnidadesDevolucionVentas
FROM Tabla1 AS T1 LEFT JOIN (SELECT Producto,SUM(Salida) AS
UnidadesVendidas,SUM(Entrada) AS UnidadesDevolucionVentas FROM Tabla1 WHERE
Tipo IN ('FCR','DFC')
GROUP BY Producto) AS T2 ON T1.Producto=T2.Producto
GROUP BY T1.Producto,UnidadesVendidas,UnidadesDevolucionVentas

Resultados:
D1001,102,15,1200000,600000,5,2

Debe mostrar todos los movimientos y adicionalmente los movimientos de
ventas solamente

La pregunta es:

Tiene más rendimiento este tipo de subconsultas, o crear una vista filtrando
las ventas ( WHERE Tipo IN ('FCR','DFC') )
y crear la instrucción SELECT uniendo la tabla con la vista ?

Espero me puedan dar una sugerencia.



Diego M Romero

Preguntas similare

Leer las respuestas

#6 Diego Romero
06/11/2007 - 16:27 | Informe spam
Si, lo había pensado, pero el problema de las vistas es que no permiten
parametros como los Procedimientos Almacenados. Es decir, enviar dos
parametros tipo fecha @FechaInicial SMALLDATETIME,@FechaFinal SMALLDATETIME

ó el problema es que no me he familiarizado con las vistas, siempre creo
procedimientos.

Gracias por sus sugerencias.


Diego M Romero

"Jose Antonio" escribió en el mensaje
news:
Si esta consulta vas a realizarla habitualmente, yo crearia una vista
indexada va ha ser mucho mas eficiente que cualquier consulta.

"Diego Romero" escribió en el mensaje de noticias
news:
Hola
Como estan ?

Tengo una tabla donde esta toda la información del movimiento de
artículos de un inventario, asi:
Producto,Fecha,Tipo, Entrada, Salida,CostoEntradas,CostoSalidas
=>> D1001,1/1/2007,ENT,100,0,1000000,0 (registro de entradas)
D1001,1/1/2007,SAL,0,10,0,100000 (registro de salidas)
D1001,2/2/2007,FCR,0,5,0,500000 (Registro de facturas)
D1001,2/2/2007,DFC,2,0,200000,0 (Registro de devolucion de facturas)

Necesito una consulta para ver el resumen de movimiento por producto,
asi:
Producto,TotalEntradas,TotalSalidas,TotalCostoEntradas,TotalCostoSalidas,UnidadesVendidas,UnidadesDevolucionVentas

Cree una instrucción select utilizando un LEFT JOIN contra la misma tabla
para ver los totales de ventas:

SELECT T1.Producto,SUM(Entrada) as TotalEntradas,SUM( Salida) AS
TotalSalidas
,SUM(CostoEntradas) AS TotalCostoEntradas,SUM(CostoSalidas) AS
TotalCostoSalidas
,UnidadesVendidas,UnidadesDevolucionVentas
FROM Tabla1 AS T1 LEFT JOIN (SELECT Producto,SUM(Salida) AS
UnidadesVendidas,SUM(Entrada) AS UnidadesDevolucionVentas FROM Tabla1
WHERE Tipo IN ('FCR','DFC')
GROUP BY Producto) AS T2 ON T1.Producto=T2.Producto
GROUP BY T1.Producto,UnidadesVendidas,UnidadesDevolucionVentas

Resultados:
D1001,102,15,1200000,600000,5,2

Debe mostrar todos los movimientos y adicionalmente los movimientos de
ventas solamente

La pregunta es:

Tiene más rendimiento este tipo de subconsultas, o crear una vista
filtrando las ventas ( WHERE Tipo IN ('FCR','DFC') )
y crear la instrucción SELECT uniendo la tabla con la vista ?

Espero me puedan dar una sugerencia.



Diego M Romero




Respuesta Responder a este mensaje
#7 Carlos Sacristan
06/11/2007 - 17:50 | Informe spam
No es posible crear vistas indexadas en combinaciones externas (OUTER
JOIN), así que a menos que puedas modificar la sentencia no va a poder
usarlas.

Yo crearía el procedimiento almacenado que aceptara esos parámetros de
entrada y revisaría el plan de ejecución de la sentencia que tienes para ver
por dónde se puede mejorar


"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil… si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Diego Romero" escribió en el mensaje
news:
Si, lo había pensado, pero el problema de las vistas es que no permiten
parametros como los Procedimientos Almacenados. Es decir, enviar dos
parametros tipo fecha @FechaInicial SMALLDATETIME,@FechaFinal
SMALLDATETIME

ó el problema es que no me he familiarizado con las vistas, siempre creo
procedimientos.

Gracias por sus sugerencias.


Diego M Romero

"Jose Antonio" escribió en el mensaje
news:
Si esta consulta vas a realizarla habitualmente, yo crearia una vista
indexada va ha ser mucho mas eficiente que cualquier consulta.

"Diego Romero" escribió en el mensaje de noticias
news:
Hola
Como estan ?

Tengo una tabla donde esta toda la información del movimiento de
artículos de un inventario, asi:
Producto,Fecha,Tipo, Entrada, Salida,CostoEntradas,CostoSalidas
=>>> D1001,1/1/2007,ENT,100,0,1000000,0 (registro de entradas)
D1001,1/1/2007,SAL,0,10,0,100000 (registro de salidas)
D1001,2/2/2007,FCR,0,5,0,500000 (Registro de facturas)
D1001,2/2/2007,DFC,2,0,200000,0 (Registro de devolucion de facturas)

Necesito una consulta para ver el resumen de movimiento por producto,
asi:
Producto,TotalEntradas,TotalSalidas,TotalCostoEntradas,TotalCostoSalidas,UnidadesVendidas,UnidadesDevolucionVentas

Cree una instrucción select utilizando un LEFT JOIN contra la misma
tabla para ver los totales de ventas:

SELECT T1.Producto,SUM(Entrada) as TotalEntradas,SUM( Salida) AS
TotalSalidas
,SUM(CostoEntradas) AS TotalCostoEntradas,SUM(CostoSalidas) AS
TotalCostoSalidas
,UnidadesVendidas,UnidadesDevolucionVentas
FROM Tabla1 AS T1 LEFT JOIN (SELECT Producto,SUM(Salida) AS
UnidadesVendidas,SUM(Entrada) AS UnidadesDevolucionVentas FROM Tabla1
WHERE Tipo IN ('FCR','DFC')
GROUP BY Producto) AS T2 ON T1.Producto=T2.Producto
GROUP BY T1.Producto,UnidadesVendidas,UnidadesDevolucionVentas

Resultados:
D1001,102,15,1200000,600000,5,2

Debe mostrar todos los movimientos y adicionalmente los movimientos de
ventas solamente

La pregunta es:

Tiene más rendimiento este tipo de subconsultas, o crear una vista
filtrando las ventas ( WHERE Tipo IN ('FCR','DFC') )
y crear la instrucción SELECT uniendo la tabla con la vista ?

Espero me puedan dar una sugerencia.



Diego M Romero








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