Duda sobre vista y tabla.

09/03/2005 - 18:08 por djsalus | Informe spam
Hola a todos, antetodo agradeceros por la atención.

Mi duda quizás sea muy básica, pero no tengo muy claro el
funcionamiento.

Me piden crear una vista sobre 2 tablas A y B.
Resulta que la tabla A es muy grande y se utiliza muchísimo por la
aplicación.

Cómo sería el funcionamiento natural del sqlserver?:
1) cada vez que actualice la tabla A obligo al sqlserve a refrescar la
vista. Si funciona así, estaríamos hablando que creando una vista
estoy penalizando el rendimiento de toda aplicación que toque la tabla
A. (obligo al sistema a actualzar la vista).

2) a la inversa, es decir, independientemente de que actualice la
tabla A, la vista solo se actualiza en el momento de utilizarla. Esto
quiere decir que la aplicación no se penaliza, solo que las vistas
tienen una ligera penalización porque tiene que recalcular cada vez
que se llame.


Como veis, mi duda nace porque tenemos una aplicación muy grande cuyo
motor viene a ser la tabla A, y ahora el cliente pide una vista sobre
dicha tabla, pero para una aplicación nueva que es muy pequeña y que
se utiliza mucho menos A ver si por poner la vista voy a penalizar
la aplicación grande


Y por otro lado, ¿el hecho de lanzar la vista, bloquea el registro que
está leyendo como hacen las tablas? En caso afirmativo, ¿existen
también instrucciones para hacer que la vista no bloquee nada? (como
el with nolock que se utiliza en las tablas...)


Gracias de antemano a todos por la atención prestada.
 

Leer las respuestas

#1 Maxi
09/03/2005 - 18:15 | Informe spam
Hola a ver, veamos un poco de teoria ;)

Una vista comun no deja de ser mas que el guardado de una query que se
ejecuta en el momento de llamarla.

Por ej, imaginemos una vista asi

CREATE VIEW MIVISTA AS
SELECT CAMPOS FROM TABLA

Cada vez que ejecute la vista (Select campos from mivista) estara el motor
realmente ejecutando su contenido, por lo cual es como si hubiere escrito la
sentencia hacia las tablas.

La vista es una manera de encapsular logica y permitir poder hacer algunas
cosas mas faciles.

Ahora, si el cambio es a nivel de estructura y no de registros, vamos a
tener que rearmar la vista :(

Tambien disponemos de unas vistas llamadas Indexadas donde aca cambia un
poco la cosa, ya no es el guardado solo de la instruccion sino que se guarda
en disco, con lo cual funcionaria casi como una tabla cualquiera con la
ventaja de encapsulamiento.

Si quieres leer mas informacion te aconsejo una leida por tus libros en
pantalla, donde podras ver detalladamente la explicacion de vistas,tablas y
todo lo que gustes :-)


Salu2
Maxi


"djana" escribió en el mensaje
news:
Hola a todos, antetodo agradeceros por la atención.

Mi duda quizás sea muy básica, pero no tengo muy claro el
funcionamiento.

Me piden crear una vista sobre 2 tablas A y B.
Resulta que la tabla A es muy grande y se utiliza muchísimo por la
aplicación.

Cómo sería el funcionamiento natural del sqlserver?:
1) cada vez que actualice la tabla A obligo al sqlserve a refrescar la
vista. Si funciona así, estaríamos hablando que creando una vista
estoy penalizando el rendimiento de toda aplicación que toque la tabla
A. (obligo al sistema a actualzar la vista).

2) a la inversa, es decir, independientemente de que actualice la
tabla A, la vista solo se actualiza en el momento de utilizarla. Esto
quiere decir que la aplicación no se penaliza, solo que las vistas
tienen una ligera penalización porque tiene que recalcular cada vez
que se llame.


Como veis, mi duda nace porque tenemos una aplicación muy grande cuyo
motor viene a ser la tabla A, y ahora el cliente pide una vista sobre
dicha tabla, pero para una aplicación nueva que es muy pequeña y que
se utiliza mucho menos A ver si por poner la vista voy a penalizar
la aplicación grande


Y por otro lado, ¿el hecho de lanzar la vista, bloquea el registro que
está leyendo como hacen las tablas? En caso afirmativo, ¿existen
también instrucciones para hacer que la vista no bloquee nada? (como
el with nolock que se utiliza en las tablas...)


Gracias de antemano a todos por la atención prestada.

Preguntas similares