sql - rendimiento - ¿Está bien tener muchas vistas de bases de datos?
view lenta mysql (4)
Con poca frecuencia (mensual / trimestral) genero cientos de informes de Crystal Reports usando las vistas de la base de datos de Microsoft SQL Server 2005. ¿Están esas vistas perdiendo ciclos de CPU y RAM durante todo el tiempo que no estoy leyendo de ellos? ¿Debo utilizar en su lugar los procedimientos almacenados, las tablas temporales o las tablas normales de corta vida ya que rara vez leo de mis puntos de vista?
No soy un DBA, así que no sé lo que está sucediendo detrás de las escenas dentro del servidor de la base de datos.
¿Es posible tener demasiadas vistas de bases de datos? ¿Qué se considera la mejor práctica?
En su mayor parte, no importa. Sí, SQL Server tendrá más opciones cuando analice SELECT * FROM table (tendrá que buscar en los catálogos del sistema para ''table'') pero está altamente optimizado para eso, y siempre que tenga suficiente RAM (la mayoría de los servidores actuales) , no notará una diferencia entre 0 y 1,000 vistas.
Sin embargo, desde una perspectiva de las personas, tratar de gestionar y descubrir qué hacen "cientos" de vistas es probablemente imposible, por lo que es probable que haya muchos códigos duplicados allí. ¿Qué sucede si cambian algunas reglas de negocio que están integradas en estas vistas redundantes?
El punto de vista principal es encapsular la lógica de negocios en una pseudo tabla (para que pueda tener una tabla de personas, pero luego una vista llamada "personas activas" que hace algo de magia). Crear una vista para cada informe es algo tonto a menos que cada informe esté tan aislado y exclusivo que no haya posibilidad de volver a usarlo.
Las vistas solo ocuparán recursos de CPU / memoria cuando se llamen.
De todos modos, la mejor práctica sería consolidar lo que se puede consolidar, eliminar lo que se puede eliminar y si sus informes solo lo usan literalmente, elija un estándar de nomenclatura coherente para las vistas para que puedan agruparse fácilmente al buscar una vista particular .
Además, a menos que realmente necesite aislamiento transaccional, considere usar la sugerencia de la tabla NOLOCK en sus consultas.
- Kevin Fairchild
Usted pregunta: ¿Qué está pasando detrás de escena?
Una vista es un montón de texto SQL. Cuando una consulta utiliza una vista, SQL Server coloca ese texto SQL en la consulta. Esto sucede ANTES de la optimización. El resultado es que el optimizador puede considerar el código combinado en lugar de dos piezas de código separadas para el mejor plan de ejecución.
¡Debería ver los planes de ejecución de sus consultas! Hay mucho que aprender allí.
SQL Server también tiene un concepto de vista agrupada . Una vista agrupada es un conjunto de resultados mantenido por el sistema (cada inserción / actualización / eliminación en las tablas subyacentes puede causar inserción / actualización / eliminación en los datos de la vista agrupada ). Es un error común pensar que las vistas operan de la forma en que operan las vistas agrupadas .
Una vista es una consulta que se ejecuta a menudo con parámetros preestablecidos. Si sabe que estará buscando los mismos datos todo el tiempo, puede crear una vista para facilitar el uso y para el enlace de datos.
Dicho esto, cuando selecciona desde una vista, la consulta que define la vista se ejecuta junto con la consulta que está ejecutando.
Por ejemplo, si vwCustomersWhoHavePaid es:
Select * from customers where paid = 1
y la consulta que está ejecutando devuelve que los clientes que han pagado después del primero de agosto tienen el siguiente formato:
Select * from vwCustomersWhoHavePaid where datepaid > ''08/01/08''
La consulta que está ejecutando actualmente es:
Select * from (Select * from customers where paid = 1) where datepaid > ''08/01/08''
Esto es algo que debe tener en cuenta al crear vistas, es una manera de almacenar datos que mira a menudo. Es solo una forma de organizar los datos para que sea más fácil acceder a ellos.