Las vistas pueden ser perjudiciales para el rendimiento cuando la vista contiene lógica, columnas, filas o tablas que no son finalmente utilizadas por su consulta final. No puedo decirle cuántas veces he visto cosas como:
SELECT ...
FROM (View with complex UNION of ActiveCustomer and InactiveCustomer tables)
WHERE Active = True
(tanto el filtrado de todas las filas que se incluyeron en la vista desde la mesa InactiveCustomer), o
SELECT (one column)
FROM (view that returns 50 columns)
(SQL tiene que recuperar una gran cantidad de datos que después se desecha en un paso posterior. sus posibles esas otras columnas son caros para recuperar, al igual que a través de una búsqueda de marcador), o
SELECT ...
FROM (view with complex filters)
WHERE (entirely different filters)
(su probable que SQL podría tener se utiliza un índice más apropiado si las tablas se les preguntó directamente), o
SELECT (only fields from a single table)
FROM (view that contains crazy complex joins)
(un montón de recursos de la CPU a través de la unión, y la innecesaria IO para la mesa de lecturas que se desecha después), o mi favorito:
SELECT ...
FROM (Crazy UNION of 12 tables each containing a month of data)
WHERE OrderDate = @OrderDate
(Lee 12 tablas cuando solo necesita leer 1).
En la mayoría de los casos, SQL es lo suficientemente inteligente como para "ver a través de las cubiertas" y elaborar un plan de consulta eficaz de todos modos. Pero en otros casos (especialmente los muy complejos), no puede. En cada una de las situaciones anteriores, la respuesta fue eliminar la vista y consultar en su lugar las tablas subyacentes.
Al menos (incluso si usted piensa SQL sería lo suficientemente inteligente como para optimizar todos modos), eliminando la vista a veces puede hacer su propia depuración y optimización de consultas más fácil (un poco más obvio lo que hay que hacer) .
+1 En mi experiencia hay una increíble cantidad de información errónea acerca de la ignorancia y vistas db. Puede haber mucha discusión sobre qué hacen y cómo funcionan las vistas, pero no estoy seguro de si están enmarcadas así y si las respuestas son obvias. –
@Mr Shoubs: Creo que la gente hace preguntas aquí, incluso si la respuesta es fácil de buscar en Google, porque quieren la interactividad y el seguimiento/preguntas y respuestas que proporciona SO, y no creo que debamos desalentar eso. – JNK
@Paul - ¡pásame! – JNK