Vista que incluye Getdate() que tan optimo.?

02/07/2007 - 16:32 por jmauriciopb | Informe spam
Hola.

Espero me puedan ayudar con lo siguiente

Tengo la siguiente las siguientes tablas.

Inv_ItemStock
iItemStockId Int, nCantidad numeric, iIdItem Int, iIdAppDpto Int

Inv_ItemPvt
iIdItemStock Int, iIdTipPrecio Int, yValor Money

Inv_VtaTipPrice
iTipPrecioId Int, cDescripcion Varchar

Inv_PromocionC
iPromocionCId Int, tIni datetime, tFin datetime, iActivo Int

Inv_PromocionD
iPromocionDId Int, iIdPromocionC Int, iIdItemStock Int, iIdTipPrecio
Int, nPorcentaje Numeric , iCantidad Int, yValor Money

Defino la siguiente vista que de retorna los precios de venta mas el
valor del precio promocional si la promocion estubiera activa, dentro
del rango de fechas.

SELECT dbo.Inv_ItemPvt.iPVtaId, dbo.Inv_ItemPvt.iIdItemStock,
dbo.Inv_ItemPvt.iIdTipPrecio, dbo.Inv_VtaTipPrice.cDescripcion AS
cVtaTip,
dbo.Inv_ItemPvt.yValor, ISNULL(t.yValor, 0) AS
yValorP, CAST(0 AS Money) AS yPvtShow
FROM dbo.Inv_ItemPvt INNER JOIN
dbo.Inv_ItemStock ON
dbo.Inv_ItemStock.iItemStockId = dbo.Inv_ItemPvt.iIdItemStock INNER
JOIN
dbo.Inv_VtaTipPrice ON
dbo.Inv_ItemPvt.iIdTipPrecio = dbo.Inv_VtaTipPrice.iTipPrecioId LEFT
OUTER JOIN
(SELECT Inv_PromocionD.iIdItemStock,
Inv_PromocionD.iIdTipPrecio, Inv_PromocionD.yValor
FROM Inv_PromocionD INNER JOIN
Inv_PromocionC ON
Inv_PromocionC.iPromocionCId = Inv_PromocionD.iIdPromocionC
WHERE GetDate() BETWEEN
Inv_PromocionC.tIni AND Inv_PromocionC.tFin AND Inv_PromocionC.iActivo
= 1) t ON
dbo.Inv_ItemPvt.iIdItemStock = t.iIdItemStock
AND dbo.Inv_ItemPvt.iIdTipPrecio = t.iIdTipPrecio

Preguntas.
1.- Es optimo tener este tipo de vista que incluye GetDate().
Teniendo en cuenta que la tablas tendran registros
- Inv_ItemStock 10000 +-
- Inv_ItemPvt 30000 +-
- Inv_VtaTipPrice 10 +-
- Inv_PromocionC depende de numero de promociones que no seran
mas de 30 al año.
- Inv_PromocionD No registros de Inv_PromocionC x items en
promocion.

El nivel de consulta a la vista no es alto por el momento ya que
solamante tendran un 5 PC consultando la vista, de las cuales 2 son
puntos de venta no muy recurrentes.

2.- Como puedo cambiar esta parte del Select:
CAST(0 AS Money) AS yPvtShow
por algo como esto.
IIf(yValorP > 0, yValorP, yValor) As yPvtShow

3.- Es factible indexar esta vista, teniendo en cuenta que al hacerlo
esta el conjunto de resultados se almacena en la base de datos de la
misma forma que se almacena una tabla con un índice agrupado?

Espero no haber sido muy extenso.
Trabajo con Sql Server 2000 Sp 4

Saludos cordiales,
Mauricio Pulla
Cuenca-Ecuador
 

Leer las respuestas

#1 Javier Loria
02/07/2007 - 20:18 | Informe spam
Hola:
1) Yo no le veo problema a la consulta. El uso del GetDate no debe ser
problema y el numero de registros es bajos. Eventualmente debe revisarse que
Inv_ItemPvt tenga un indice que inicie con iItemStockId.
2) Puedes hacerlos con:
= CASE WHEN yValorP>0 THEN yValorP
ELSES yValor END AS yPvtShow
= 3) No es factible indexar la vista por el GetDate, ya que cambia cientos
de veces por segundo, y no quisieramos que el servidor este recalculando la
vista en cada ocasion.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

wrote in message
news:
Hola.

Espero me puedan ayudar con lo siguiente

Tengo la siguiente las siguientes tablas.

Inv_ItemStock
iItemStockId Int, nCantidad numeric, iIdItem Int, iIdAppDpto Int

Inv_ItemPvt
iIdItemStock Int, iIdTipPrecio Int, yValor Money

Inv_VtaTipPrice
iTipPrecioId Int, cDescripcion Varchar

Inv_PromocionC
iPromocionCId Int, tIni datetime, tFin datetime, iActivo Int

Inv_PromocionD
iPromocionDId Int, iIdPromocionC Int, iIdItemStock Int, iIdTipPrecio
Int, nPorcentaje Numeric , iCantidad Int, yValor Money

Defino la siguiente vista que de retorna los precios de venta mas el
valor del precio promocional si la promocion estubiera activa, dentro
del rango de fechas.

SELECT dbo.Inv_ItemPvt.iPVtaId, dbo.Inv_ItemPvt.iIdItemStock,
dbo.Inv_ItemPvt.iIdTipPrecio, dbo.Inv_VtaTipPrice.cDescripcion AS
cVtaTip,
dbo.Inv_ItemPvt.yValor, ISNULL(t.yValor, 0) AS
yValorP, CAST(0 AS Money) AS yPvtShow
FROM dbo.Inv_ItemPvt INNER JOIN
dbo.Inv_ItemStock ON
dbo.Inv_ItemStock.iItemStockId = dbo.Inv_ItemPvt.iIdItemStock INNER
JOIN
dbo.Inv_VtaTipPrice ON
dbo.Inv_ItemPvt.iIdTipPrecio = dbo.Inv_VtaTipPrice.iTipPrecioId LEFT
OUTER JOIN
(SELECT Inv_PromocionD.iIdItemStock,
Inv_PromocionD.iIdTipPrecio, Inv_PromocionD.yValor
FROM Inv_PromocionD INNER JOIN
Inv_PromocionC ON
Inv_PromocionC.iPromocionCId = Inv_PromocionD.iIdPromocionC
WHERE GetDate() BETWEEN
Inv_PromocionC.tIni AND Inv_PromocionC.tFin AND Inv_PromocionC.iActivo
= 1) t ON
dbo.Inv_ItemPvt.iIdItemStock = t.iIdItemStock
AND dbo.Inv_ItemPvt.iIdTipPrecio = t.iIdTipPrecio

Preguntas.
1.- Es optimo tener este tipo de vista que incluye GetDate().
Teniendo en cuenta que la tablas tendran registros
- Inv_ItemStock 10000 +-
- Inv_ItemPvt 30000 +-
- Inv_VtaTipPrice 10 +-
- Inv_PromocionC depende de numero de promociones que no seran
mas de 30 al año.
- Inv_PromocionD No registros de Inv_PromocionC x items en
promocion.

El nivel de consulta a la vista no es alto por el momento ya que
solamante tendran un 5 PC consultando la vista, de las cuales 2 son
puntos de venta no muy recurrentes.

2.- Como puedo cambiar esta parte del Select:
CAST(0 AS Money) AS yPvtShow
por algo como esto.
IIf(yValorP > 0, yValorP, yValor) As yPvtShow

3.- Es factible indexar esta vista, teniendo en cuenta que al hacerlo
esta el conjunto de resultados se almacena en la base de datos de la
misma forma que se almacena una tabla con un índice agrupado?

Espero no haber sido muy extenso.
Trabajo con Sql Server 2000 Sp 4

Saludos cordiales,
Mauricio Pulla
Cuenca-Ecuador

Preguntas similares