Duda sobre vista

04/09/2005 - 02:47 por Alfredo Crisostomo | Informe spam
Si yo tengo una vista compuesta de un inner join entre dos tablas y hago un
query sobre esta vista de la forma:

select * from mivista where mivista.campo=@valor

quiero saber si sql server optimiza el query filtrando los datos de la vista
o primero trae todos los registros de la vista y a ese resultado es que
aplica el where ?
 

Leer las respuestas

#1 Alejandro Mesa
04/09/2005 - 15:32 | Informe spam
Alfredo,

Podemos tener dos tipos de vista en SQL Server 2000.

- no indexadas
- indexadas

Las vistas no indexadas no son mas que una tabla virtual. Virtual porque en
realidad solo existe su definicion, la cual es usada cada vez que la vista es
referenciada (como si fuese una macro sustitucion).

Las vistas indexadas, en cambio, se convierten en tablas fisicas una vez que
se crea el indice clustered (puedes leer sobre indices clustered en los BOL
para que tengas una mejor idea de porque estas vistas se materializan).

SQL Server 2000 nos deja crear las vistas indexadas en cualquier version,
pero el optimizador de queries no hace un uso automatico de estas en la
version standard, personal, desktop, etc. En estas versiones debemos usar el
modificador (view hint) "with noexpand" en la sentencia "select" para que SQL
Server no expanda la vista y trabaje sobre las tablas que esta referencia. En
la version "Enterprise" y /o "Developer" esto cambia, el optimizador puede
hacer uso de las vistas indexadas incluso cuando estas no son referenciadas
directamente en la sentencia "select", osea que lo que referenciamos son las
tablas que conforman la vista.


AMB

"Alfredo Crisostomo" wrote:

Si yo tengo una vista compuesta de un inner join entre dos tablas y hago un
query sobre esta vista de la forma:

select * from mivista where mivista.campo=@valor

quiero saber si sql server optimiza el query filtrando los datos de la vista
o primero trae todos los registros de la vista y a ese resultado es que
aplica el where ?




Preguntas similares