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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
09/03/2005 - 18:32 | Informe spam
Las vistas siempre se recalcularán en el momento de ser consultadas.
La opcion 2 de tu pregunta...


Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.



"djana" wrote in message 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.
Respuesta Responder a este mensaje
#3 Alejandro Mesa
09/03/2005 - 19:03 | Informe spam
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.



Esto se cumple solo para las vistas no indexadas. En el caso de vistas con
indice unique clustered, ellas si son almacenadas fisicamente en disco al
igual que una tabla con indice clustered y la actualizacion de las tablas
involucradas en la vista la vista son reflejadas automaticamente en la vista.


AMB


"djana" wrote:

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.

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