Pregunta

Con poca frecuencia (mensualmente/trimestralmente) genero cientos de informes de Crystal Reports utilizando vistas de bases de datos de Microsoft SQL Server 2005.¿Esas vistas están desperdiciando ciclos de CPU y RAM durante todo el tiempo que no estoy leyendo de ellas?¿Debería utilizar en su lugar procedimientos almacenados, tablas temporales o tablas normales de corta duración, ya que rara vez leo desde mis vistas?

No soy un DBA, por lo que no sé qué sucede detrás de escena dentro del servidor de la base de datos.

¿Es posible tener demasiadas vistas de bases de datos?¿Qué se considera una mejor práctica?

¿Fue útil?

Solución

En su mayor parte, no importa.Sí, SQL Server tendrá más opciones cuando analice SELECT * FROM tabla (tendrá que buscar 'tabla' en los catálogos del sistema), pero está altamente optimizado para eso, y siempre que tenga suficiente RAM (la mayoría de los servidores hoy en día la tienen) , no notarás la diferencia entre 0 y 1000 vistas.

Sin embargo, desde la perspectiva de las personas, tratar de administrar y descubrir qué están haciendo "cientos" de vistas probablemente sea imposible, por lo que es probable que tenga mucho código duplicado 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 (por lo que puede tener una tabla de personas, pero luego una vista llamada "personas_activas" que hace algo de magia).Crear una vista para cada informe es un poco tonto a menos que cada informe esté tan aislado y sea tan único que no sea posible reutilizarlo.

Otros consejos

Una vista es una consulta que se ejecuta con frecuencia con parámetros preestablecidos.Si sabe que verá los mismos datos todo el tiempo, puede crear una vista para facilitar su uso y vincular 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 los clientes que pagaron después del primero de agosto y tiene el formato siguiente:

Select * from vwCustomersWhoHavePaid where datepaid > '08/01/08'

La consulta que realmente estás ejecutando es:

Select * from (Select * from customers where paid = 1) where datepaid > '08/01/08'

Esto es algo que debes tener en cuenta al crear vistas, son una forma de almacenar datos que consulta con frecuencia.Es solo una forma de organizar los datos para que sea más fácil acceder a ellos.

Las vistas solo consumirá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 literalmente solo lo utilizan sus informes, elegir un estándar de nomenclatura coherente para las vistas para que puedan agruparse fácilmente cuando se busca una vista en particular. .

Además, a menos que realmente necesite aislamiento transaccional, considere usar la sugerencia de 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 fragmentos de código separados para obtener el mejor plan de ejecución.

¡Deberías mirar los planes de ejecución de tus consultas!Hay mucho que aprender allí.

SQL Server también tiene un concepto de vista agrupada.A 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 las tablas subyacentes). vista agrupadadatos de).Es un error común pensar que las opiniones operan de la manera en que vistas agrupadas funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top