¿Las vistas de la base de datos son solo un medio para simplificar el acceso a los datos o proporcionan beneficios de rendimiento al acceder a las vistas en lugar de solo ejecutar la consulta en la que se basa la vista? Sospecho que las vistas son funcionalmente equivalentes a solo agregar la consulta de vista almacenada a cada consulta en los datos de vista, ¿es correcto o hay otros detalles y/o optimizaciones que suceden?¿Las vistas de la base de datos afectan el rendimiento de la consulta?
Respuesta
Depende del RDBMS, pero generalmente no hay optimización, y es solo una forma conveniente de simplificar las consultas. Algunos sistemas de bases de datos usan "vistas materializadas", sin embargo, que usan un mecanismo de almacenamiento en caché.
Por lo general, una vista es solo una forma de crear una abreviatura común para definir los conjuntos de resultados que necesita con frecuencia.
Sin embargo, hay un inconveniente. La tentación es agregar en cada columna que crees que necesitarás en algún momento cuando desees utilizar la vista. Entonces YAGNI es violado. No solo las columnas, sino que a veces se unen las uniones externas adicionales en "por las dudas". Así que cubrir los índices puede que ya no cubran, y el plan de consulta puede aumentar en complejidad (y disminuir la eficiencia).
YAGNI es un concepto crítico en el diseño SQL.
Es curioso cómo siempre me adherí a los principios de YAGNI pero no sabía que realmente existían hasta que busqué YAGNI :) – SAMills
Siempre he considerado las Vistas como procedimientos almacenados de solo lectura. Proporciona a la base de datos la mayor cantidad de información posible por adelantado para que pueda precompilar lo mejor que pueda.
También puede indexar las vistas, lo que le permite acceder a una vista optimizada de los datos que está buscando para el tipo de consulta que está ejecutando.
¿Algún ejemplo real de esto? ¿Conoce algún RDMS que se ejecute más rápido en una vista que en una declaración de selección equivalente? Por supuesto, el índice ayuda, pero ese índice también ayuda a la declaración de selección. Tu respuesta implica que una vista es más rápida, solo me preguntaba si tienes pruebas o simplemente adivinas. –
No conozco ningún servidor de bases de datos que cree un plan de ejecución de consultas en el momento de la vista o la creación de procedimientos almacenados. Los planes de ejecución requieren estadísticas de índice, que no están disponibles en tiempo de compilación. La compilación solo transforma el SQL/DDL en un formato interno. –
sindre, algunos servidores de bases de datos admiten "vistas indizadas", que son más como "vistas materializadas", más cerca de una tabla mantenida automáticamente que una vista per se. –
En general, las vistas deben realizarse de manera equivalente a una consulta escrita directamente en las tablas subyacentes.
Pero: puede haber casos de bordes, y le conviene probar su código. Todos los sistemas RDBMS modernos tienen herramientas que le permitirán ver los planes de consulta y supervisar la ejecución. No tome mi palabra (ni la de nadie) por ella, cuando pueda tener los datos definitivos a su alcance.
Aunque una consulta determinada que se ejecuta dentro de una vista y la misma consulta que se ejecuta fuera de la vista deben funcionar de manera equivalente, las cosas se vuelven mucho más complicadas rápidamente cuando necesita unir dos vistas. Puede terminar fácilmente trayendo tablas que no necesita en la consulta, o trayendo tablas de forma redundante. El optimizador de la base de datos puede tener más problemas para crear un buen plan de ejecución de consultas. Por lo tanto, aunque las vistas pueden ser muy buenas en términos de permitir una seguridad de grano más fino y similares, no son necesariamente buenas para la modularidad.
Sé que este es un hilo viejo. La discusión es buena, pero quiero echar un pensamiento más. El rendimiento también depende de lo que está utilizando para extraer datos. Por ejemplo, si tiene acceso directo a algo como Microsoft Access, definitivamente puede obtener rendimiento para algunas consultas complejas mediante el uso de una vista. Esto se debe a que Access no siempre extrae del servidor SQL lo que quisiéramos, en algunos casos atraería tablas enteras e intentaría procesar localmente desde allí. No es así si usa una vista.
Sí, en todos los RDBMS modernos (MSSQL después de 2005? Etc.) los planes de consulta de la vista se almacenan en caché eliminando la sobrecarga de la planificación de la consulta y acelerando el rendimiento en el mismo SQL ejecutado en línea. Anteriormente a esto (y también se aplica a SQL parametrizado/Declaraciones preparadas), las personas pensaban correctamente que los procedimientos almacenados tenían un mejor rendimiento.
Muchos todavía se aferran a esto hoy por lo que es un mito DB moderno. Desde que Views/PS obtuvieron la planificación de consulta en caché de los SP, han sido bastante parejos.
- 1. ¿Está BIEN anidar las vistas de la base de datos?
- 2. Rspec> probar las vistas de la base de datos
- 3. ¿Cómo afectan los valores NULL al rendimiento en una búsqueda en la base de datos?
- 4. QGraphicsScene, las coordenadas de los artículos afectan el rendimiento?
- 5. ¿Cómo afectan las restricciones de DataTable de ADO.NET al rendimiento?
- 6. ¿Cómo afectan las ramas cerradas el rendimiento de Mercurial?
- 7. ¿Los comentarios afectan el rendimiento de Perl?
- 8. Implementación de la base de datos de características "más vistas"
- 9. ¿Los modificadores de acceso afectan el rendimiento?
- 10. ¿El nombre de la tabla o la longitud del nombre de la columna afectan el rendimiento?
- 11. ¿Cómo borrar todas las vistas de la base de datos mysql usando mysql query/command?
- 12. ¿Pueden las claves foráneas dañar el rendimiento de la consulta?
- 13. Consulta SQL para mostrar todas las vistas en una base de datos de SQL Server 2005
- 14. Cuándo usar las vistas de la base de datos y cuándo no?
- 15. discrepancia en el resultado del marco de entidades para las vistas de una base de datos
- 16. Rendimiento de inserción de base de datos
- 17. Complejidad del tiempo de consulta de la base de datos
- 18. ¿Cómo puedo limitar el tiempo de consulta de la base de datos durante las solicitudes web?
- 19. LINQ Consulta para insertar datos en la base de datos
- 20. Cómo copiar vistas de una base de datos a otra base de datos
- 21. MySQL Tamaño de la base de datos de consulta
- 22. ¿Los resultados de la consulta tardan demasiado en la base de datos 200K, aceleran las sugerencias?
- 23. Cómo depurar una consulta de base de datos para el rendimiento
- 24. ¿Se necesita experiencia en el rendimiento de la base de datos de Heroku?
- 25. Sql insertar rendimiento de consulta
- 26. ¿El número de columnas afecta el rendimiento de la consulta?
- 27. ¿La longitud del campo de la base de datos (máxima) afecta el rendimiento?
- 28. Mejorar el rendimiento de la consulta de Django DB
- 29. Consulta síncrona a la base de datos web SQL
- 30. Lista de todas las tablas en la base de datos
Estoy deseando leer las respuestas. A partir de la experiencia práctica, si el conjunto de resultados resultante es significativo, hemos encontrado que obtenemos un mejor rendimiento al alinear la vista dentro de un procedimiento para recortar el conjunto de resultados. – SAMills