Mi primera vista indexada

16/03/2005 - 01:04 por Danilsa | Informe spam
He creado una vista indexada (mi primera :)) leyendo los datos de los BOL
y consultas del foro:

Tengo una tabla MOVIMIENTO (cuenta char(15),fecha smalldatetime ,debito
numeric(16,2),credito numeric(16,2)) /*una tabla de movimientos contables
por cuenta,fecha y su debito o credito*/

La razon de la vista es tener un resumen por mes y por cuenta del total de
debitos y total de creditos de cada cuenta. Se debe a que constantemente
piden reportes mensuales, bimestrales, trimestrales, estadisticas mensuales,
promedios etc. de estos balances.

Esta es la vista. Lo de schemabinding y demas cosas lo descubri despues de
decenas de intentos y lecturas:

*es una salida a un script*

CREATE VIEW dbo.vBALANCE
WITH SCHEMABINDING
AS
SELECT DATEPART([YEAR], fecha) AS ano, DATEPART([MONTH], fecha) AS mes,
cuenta,
SUM(debito) AS debitos, SUM(credito) AS creditos, COUNT_BIG (*) AS CNT
FROM dbo.MOVIMIENTO
GROUP BY DATEPART([YEAR], fecha), DATEPART([MONTH], fecha), cuenta


Luego el indice agrupado:

CREATE UNIQUE CLUSTERED INDEX [AnoMesCuenta] ON [dbo].[vBALANCE]([ano],
[mes], [cuenta]) ON [PRIMARY]

Mis preguntas son:
1) Por que para que me permitiera crear el indice agrupado tuve que ponerle
COUNT_BIG(*) ? Lo puse porque lo dice en los bol's pero no dice o no vi
clara la razon. A que se debe ? Cada vista indexada necesita eso ?

2) Segun vi en la ayuda, con solo crear el indice hace que la vista "resida"
fisicamente en la BD como una tabla ? es asi ? O sea que cada vez que hago
referencia a esta vista, no se expande en ese momento ? o sea que es como si
fuera un trigger ?

3) Que opinion tienen sobre el uso de DATEPART aqui ? no afecta el
rendimiento ? seria o no preferible tener columnas que guarden año y mes
directamente en la tabla MOVIMIENTO ?

4) En sentido general esta vista habra de funcionar eficientemente bien ?
Hay alguna otra manera de definirla que sea mas eficiente ?

Mil gracias.

Danilsa Jimenez
Panama

Preguntas similare

Leer las respuestas

#6 José Antonio
17/03/2005 - 13:39 | Informe spam
Ya lo he encontrado, estoy probando las vitas indizadas y no pensaba que
funcionasen tan rapido, evitan la mayoria de los triggers y la creacion de
tablas para acumular resultados.

Sin embargo tengo un problema que se produce despues de crear la vista
indizada, y es que cuando inserto o borro filas en la tabla relacionada con
la vista me da un error de
que la opcion ARITHABORT esta mal configurada.

¿Donde se cambian estas opciones?

¿El cambio de estas opciones repercute negativamente en las demas tablas?

Saludos.


"José Antonio" escribió en el
mensaje news:%
¿No se pueden crear vistas indizadas con el Manager de Sql?

"Danilsa" escribió en el mensaje
news:
He creado una vista indexada (mi primera :)) leyendo los datos de los
BOL
y consultas del foro:

Tengo una tabla MOVIMIENTO (cuenta char(15),fecha smalldatetime ,debito
numeric(16,2),credito numeric(16,2)) /*una tabla de movimientos contables
por cuenta,fecha y su debito o credito*/

La razon de la vista es tener un resumen por mes y por cuenta del total
de
debitos y total de creditos de cada cuenta. Se debe a que constantemente
piden reportes mensuales, bimestrales, trimestrales, estadisticas
mensuales,
promedios etc. de estos balances.

Esta es la vista. Lo de schemabinding y demas cosas lo descubri despues
de
decenas de intentos y lecturas:

*es una salida a un script*

CREATE VIEW dbo.vBALANCE
WITH SCHEMABINDING
AS
SELECT DATEPART([YEAR], fecha) AS ano, DATEPART([MONTH], fecha) AS
mes,
cuenta,
SUM(debito) AS debitos, SUM(credito) AS creditos, COUNT_BIG (*) AS CNT
FROM dbo.MOVIMIENTO
GROUP BY DATEPART([YEAR], fecha), DATEPART([MONTH], fecha), cuenta


Luego el indice agrupado:

CREATE UNIQUE CLUSTERED INDEX [AnoMesCuenta] ON
[dbo].[vBALANCE]([ano],
[mes], [cuenta]) ON [PRIMARY]

Mis preguntas son:
1) Por que para que me permitiera crear el indice agrupado tuve que
ponerle
COUNT_BIG(*) ? Lo puse porque lo dice en los bol's pero no dice o no vi
clara la razon. A que se debe ? Cada vista indexada necesita eso ?

2) Segun vi en la ayuda, con solo crear el indice hace que la vista
"resida"
fisicamente en la BD como una tabla ? es asi ? O sea que cada vez que
hago
referencia a esta vista, no se expande en ese momento ? o sea que es como
si
fuera un trigger ?

3) Que opinion tienen sobre el uso de DATEPART aqui ? no afecta el
rendimiento ? seria o no preferible tener columnas que guarden año y mes
directamente en la tabla MOVIMIENTO ?

4) En sentido general esta vista habra de funcionar eficientemente bien ?
Hay alguna otra manera de definirla que sea mas eficiente ?

Mil gracias.

Danilsa Jimenez
Panama






Respuesta Responder a este mensaje
#7 Jorge Garcia
18/03/2005 - 11:08 | Informe spam
Debes configurar SET ARITHABORT ON si usas oledb u odbc.

Puedes ver en la ayuda.



"José Antonio" escribió en el
mensaje news:#
Ya lo he encontrado, estoy probando las vitas indizadas y no pensaba que
funcionasen tan rapido, evitan la mayoria de los triggers y la creacion de
tablas para acumular resultados.

Sin embargo tengo un problema que se produce despues de crear la vista
indizada, y es que cuando inserto o borro filas en la tabla relacionada


con
la vista me da un error de
que la opcion ARITHABORT esta mal configurada.

¿Donde se cambian estas opciones?

¿El cambio de estas opciones repercute negativamente en las demas tablas?

Saludos.


"José Antonio" escribió en el
mensaje news:%
> ¿No se pueden crear vistas indizadas con el Manager de Sql?
>
> "Danilsa" escribió en el mensaje
> news:
>> He creado una vista indexada (mi primera :)) leyendo los datos de los
>> BOL
>> y consultas del foro:
>>
>> Tengo una tabla MOVIMIENTO (cuenta char(15),fecha smalldatetime ,debito
>> numeric(16,2),credito numeric(16,2)) /*una tabla de movimientos


contables
>> por cuenta,fecha y su debito o credito*/
>>
>> La razon de la vista es tener un resumen por mes y por cuenta del total
>> de
>> debitos y total de creditos de cada cuenta. Se debe a que


constantemente
>> piden reportes mensuales, bimestrales, trimestrales, estadisticas
>> mensuales,
>> promedios etc. de estos balances.
>>
>> Esta es la vista. Lo de schemabinding y demas cosas lo descubri


despues
>> de
>> decenas de intentos y lecturas:
>>
>> *es una salida a un script*
>>
>> CREATE VIEW dbo.vBALANCE
>> WITH SCHEMABINDING
>> AS
>> SELECT DATEPART([YEAR], fecha) AS ano, DATEPART([MONTH], fecha) AS
>> mes,
>> cuenta,
>> SUM(debito) AS debitos, SUM(credito) AS creditos, COUNT_BIG (*) AS CNT
>> FROM dbo.MOVIMIENTO
>> GROUP BY DATEPART([YEAR], fecha), DATEPART([MONTH], fecha), cuenta
>>
>>
>> Luego el indice agrupado:
>>
>> CREATE UNIQUE CLUSTERED INDEX [AnoMesCuenta] ON
>> [dbo].[vBALANCE]([ano],
>> [mes], [cuenta]) ON [PRIMARY]
>>
>> Mis preguntas son:
>> 1) Por que para que me permitiera crear el indice agrupado tuve que
>> ponerle
>> COUNT_BIG(*) ? Lo puse porque lo dice en los bol's pero no dice o no vi
>> clara la razon. A que se debe ? Cada vista indexada necesita eso ?
>>
>> 2) Segun vi en la ayuda, con solo crear el indice hace que la vista
>> "resida"
>> fisicamente en la BD como una tabla ? es asi ? O sea que cada vez que
>> hago
>> referencia a esta vista, no se expande en ese momento ? o sea que es


como
>> si
>> fuera un trigger ?
>>
>> 3) Que opinion tienen sobre el uso de DATEPART aqui ? no afecta el
>> rendimiento ? seria o no preferible tener columnas que guarden año y


mes
>> directamente en la tabla MOVIMIENTO ?
>>
>> 4) En sentido general esta vista habra de funcionar eficientemente bien


?
>> Hay alguna otra manera de definirla que sea mas eficiente ?
>>
>> Mil gracias.
>>
>> Danilsa Jimenez
>> Panama
>>
>>
>
>


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