vistas en sql

16/04/2005 - 17:40 por hugo | Informe spam
En un hilo de ADO.NET donde se hablaba de n capas se escribio


"Cuando haces una restricción de una vista con restricción lo que hace
el SGBD es combinar las restricciones.

Por ejemplo si tienes una vista de ventas de tomates:

create view VentasTomates as select ventas where articulo = 'Tomate'

Y quieres restringirla para saber cuantos tomates has vendido en
Madrid

select VentasTomates where Ciudad = 'Madrid'

La consulta que realmente se va a ejecutar es la siguiente:

select ventas where articulo = 'Tomate' and ciudad = 'Madrid'

En principio el rendimiento debería de ser prácticamente el mismo, a
menos que los desarrolladores del SGBD sean unos ineptos totales, y no
creo que sea el caso."

Mi pregunta es si realmente esto es asi, ya que no lo sabia y me vendría muy
bien confirmarlo.
Gracias y saludos.
 

Leer las respuestas

#1 qwalgrande
15/04/2005 - 21:21 | Informe spam
Hola,

Una vista no es más que un trozo de código que guardas en el servidor para
mayor comodidad del usuario que escribe las consultas. En el mejor de los
casos, el motor será capaz de preparar un plan de ejecución idéntico al que
prepararía si en lugar de la vista se hubiera puesto la consulta que
construye la vista, es decir:

select * from (select * from ventas where articulo = 'Tomate') as MiVista
where Ciudad = 'Madrid'

Luego hay ocasiones (por supuesto con vistas mucho más complejas y con
numerosas tablas involucradas) en las que el motor no es capaz de
"simplificar" el plan de ejecución y tiene que ir creando tablas hash que
dan como resultado un rendimiento muy inferior.

En resumen y respondiendo a tu pregunta, para casos en los que el motor
pueda componer el mismo plan de ejecución con la vista que sin ella, el
rendimiento es igual. En el resto de los casos, el rendimiento será peor.

qwalgrande


"hugo" escribió en el mensaje
news:
En un hilo de ADO.NET donde se hablaba de n capas se escribio


"Cuando haces una restricción de una vista con restricción lo que hace
el SGBD es combinar las restricciones.

Por ejemplo si tienes una vista de ventas de tomates:

create view VentasTomates as select ventas where articulo = 'Tomate'

Y quieres restringirla para saber cuantos tomates has vendido en
Madrid

select VentasTomates where Ciudad = 'Madrid'

La consulta que realmente se va a ejecutar es la siguiente:

select ventas where articulo = 'Tomate' and ciudad = 'Madrid'

En principio el rendimiento debería de ser prácticamente el mismo, a
menos que los desarrolladores del SGBD sean unos ineptos totales, y no
creo que sea el caso."

Mi pregunta es si realmente esto es asi, ya que no lo sabia y me vendría


muy
bien confirmarlo.
Gracias y saludos.



Preguntas similares