jump to navigation

msSQL – Vistas indexadas para el ajuste del rendimiento y sugerencias para la optimización de consultas

por: Brad Anih.

Fuente: http://www.sql-server-performance.com/article_print.aspx?id=154&type=tip

 Para mejorar significativamente el rendimiento de una aplicación, se debe considerar la posibilidad de añadir un único acceso de índices agrupados. Esto se crea con el fin de almacenar dentro de la base de datos un índice agrupado por tabla.

Una vez que un único índice agrupado se ha creado para un fin, también se puede crear índices no agrupados de la misma forma, que puede ser utilizado por las consultas para de esta manera lograr aumentar el rendimiento.

Más técnicamente, podemos decir que es posible modificar las vistas de las tablas subyacentes, el índice agrupado, y cualquier índice no agrupado de la vista, de manera que siempre es actualizada cuando se accede. Por lo tanto, una vez añadido el índice a la vista, se produce un beneficioso incremento de la velocidad cuando se ejecuta la consulta, y este aumento se incrementa al momento de actualizar la vista, siendo de esta forma, menor el tiempo que se tarda en actualizar la vista del índice.

Vistas indexadas pueden ser utilizadas por SQL Server de dos formas diferentes. En primer lugar, la vista se puede llamar desde una consulta (que es como se utiliza convencionalmente). Básicamente, se corre el script, utilizando un índice agrupado para mostrar los resultados de la vista casi inmediatamente. En segundo lugar, cualquier consulta que se ejecuta en SQL Server 2000/2005 evalúa automáticamente si existen índices de vistas sobre la consulta en cuestión. Si es así, el optimizador de consultas utiliza el índice ya existente, aun cuando no haya sido especificado en la consulta, para de esta manera aumentar la velocidad y el rendimiento.

Para obtener el máximo beneficio es necesario utilizar la distribución SQL Server Enterprise Edición 2000/2005, dado que  las cualidades antes enumeradas, se encuentran disponibles a partir de esta versión puesto que en distribuciones anteriores no serán considerados automáticamente por el optimizador de consultas.

[2000, 2005] Actualizado 7-10-2006

Por otra parte, los mejores candidatos para la utilización de vistas indexadas son:

Almacenes de datos, depósitos de datos, apoyo de decisión, minería de datos, aplicaciones OLAP.

Los peores candidatos a esta situación incluyen:

[2000, 2005]. Actualizado 7-10-2006.

Seleccionar un único e ideal índice agrupado, y cualquier índice no agrupado, para un vista indexada es muy complicado. Es importante no añadir índices a la tabla subyacente y de la vista, ya que son redundantes. Es muy recomendable utilizar el Index Tuning Wizard Tuning, motor de base de datos o el asesor para ayudar a evaluar y seleccionar los índices que se utilizan en la tabla subyacente y el índice.

[2000, 2005]. Actualizado 7-10-2006.

En el diseño de índices para las vistas indexadas, es necesario mantener las siguientes consideraciones:

[2000, 2005] Actualizado 7-10-2006.

Otra forma de pensar en un índice de vistas es como un nuevo “índice agrupado”. Ya sabemos que un índice de vista físico es una aplicación que tiene un índice agrupado. . We also know that adding an indexed view incurs its own overhead, and for an indexed view to be worth it, that the performance gains from using it must be greater than its cost. Sabemos también que al agregar un índice de vista, este valga la pena, es decir  que el rendimiento de las ganancias de su uso debe ser superior a su coste.

Se conoce  que un índice de vista es sólo una vista, y que las vistas pueden ser muy limitadas por el uso de una cláusula WHERE. Por ejemplo, se tienen dos tablas, la primera  es de 5 millones de registros, y la segunda es de 2 millones de registros. En función de sus objetivos,  se puede crear un índice de vista sobre estas tablas que sumado con los gastos generales, en el supuesto de que usted tiene una cláusula WHERE apropiada.

En el ejemplo, el resultado de la vista indexada podría tener sólo 200 filas en la misma. Si este es el caso, entonces los gastos generales de mantenimiento de esta vista indexada será muy pequeño porque SQL Server sólo ha de seguir los cambios realizados por un muy pequeño porcentaje del número total de registros en ambas tablas. SQL Server sólo necesita gestionar la actividad general del número total de registros indexados en la vista, pero no en ambas tablas.

Si se mantiene lo anterior en mente, se puede crear un índice de vistas con el único propósito de la aceleración de las consultas comunes (en cierto sentido, que actúan como un nuevo índice agrupado para una tabla), en el supuesto de que se utilice adecuadamente la cláusula WHERE para reducir al mínimo la cantidad de filas que ha de SQL Server para mantener los gastos generales. [2000, 2005] Actualizado 3-15-2005.

Lamentablemente, demasiado a menudo no es mucho lo que podemos hacer, que no sea modificando los índices, porque no somos capaces de modificar la aplicación del diseño o el código como tendríamos, a fin de mejorar el rendimiento.

Si se está ejecutando SQL Server Enterprise Edición 2000/2005, se tiene otra herramienta en su conjunto de herramientas para ayudar a incrementar el rendimiento de una aplicación de otro fabricante, y que está en vistas indexadas. Si bien una aplicación de otro fabricante no puede utilizar un índice directamente (código tendría que ser modificado para utilizar una de nueva creación de vistas indexadas directamente), el optimizador de consultas puede.

Por ejemplo, si se encuentra un mal desempeño de consulta que está a cargo de la aplicación, se puede crear un índice de vistas que se podría utilizar para acelerar la consulta (esto asume que es un índice de consulta apropiado para la consulta). A pesar de que la solicitud no sabe acerca de la vista indexada, el optimizador de consultas lo hace, y que se puede evaluar para ver si se puede conseguir mejores resultados que ejecutar la consulta con normalidad. Y si el optimizador de consultas decide utilizar la vista indexada, el rendimiento de la consulta es más alto.

Si bien este es un gran concepto, puede tener una gran cantidad de trabajo, y se tendrá que experimentar para ver si el optimizador de consultas utiliza la consulta que cree. Porque si no es así, entonces se necesita remover el indexado de consulta, ya que se desperdicia si no se utiliza.

[2000, 2005] Actualizado 3-15-2005.

Idealmente, la vista indexada se debe crear, al mismo tiempo, que se crean agrupadas y no agrupadas en los índices de una tabla. La razón de esto es que es fácil, si no se tiene aún así, para crear vistas indexadas y agrupadas y no agrupadas índices que se superponen y son redundantes. Redundante de datos incrementa los gastos generales y empeora el  rendimiento de  E / S, por lo que esto se debe evitarse. Si no puede crear ambos a la vez, sólo se tiene que pensar, que siempre que las vistas indexadas o índices en una tabla, que tiene que reevaluar la totalidad de los índices sobre la tabla en este momento, a fin de Evitar que se produzcan los índices redundantes. [2000, 2005] Updated 3-15-2005

[2000, 2005] Actualizado 3-15-2005.

Por ultimo, podemos decir, que es recomendable utilizar el asistente para SQL Server o Index Tuning Motor de base de datos y un asesor de perfil del archivo de rastreo para ayudar a determinar los posibles puntos de vista indexados. Cuando el Asistente o Asesor de carreras, que busca automáticamente un indexado potencial en la vista y recomienda su uso si se encuentra alguna. Pero no dependen de esta herramienta como la única manera de identificar vistas indexadas, ya que no es capaz de identificar todos los posibles candidatos.
[2000, 2005] Actualizado 3-15-2005.


Comentarios ( Abril 2008 )

Carretero Soledad
De Cenzo Romina
Gallardo Jorge
Poleschi Sebastián
Traverso Carolina
Vazquez Hess Matias

Básicamente, una vista indexada es una vista que ha “materializado” un conjunto de valores únicos en forma de índice agrupado. Su ventaja es que proporcionan una búsqueda rápida para colocar información junto a una vista. Tras el primer índice, el cual ha de ser agrupado de un conjunto único de valores, podemos crear índices adicionales sobre la vista usando la clave agrupada del primer índice como punto de referencia. De todas formas, este tipo de vistas tiene una serie de restricciones sobre cuándo podemos y no podemos crear índices sobre las vistas.

El problema viene del tamaño de las tablas, si la base de datos no tiene suficientes datos. El optimizador hace un balance entre lo que puede tardar en ejecutarse el primer plan que encuentra y la cantidad de trabajo requerido para seguir buscando un plan mejor. Por ejemplo ¿tiene sentido tardar más de dos segundos en pensar un plan cuando el plan conocido se puede realizar en menos de un segundo?

En este caso, SQL Server observa la tabla subyacente, comprueba que no existen muchos datos y decide que el plan que tiene es “suficientemente bueno” antes de que el optimizador pueda comprobar que el índice de la vista podría ser más rápido. Este problema de “cuantos datos hay” frente a “lo que cuesta seguir buscando un plan mejor” lo debemos tener en cuenta al crear cualquier índice. En los conjuntos de datos pequeños, existe una gran probabilidad de que SQL Server ignore totalmente nuestro índice a favor del primer plan que encuentre. En este caso, pagamos el costo de mantener el índice (ejecuciones más lentas de INSERT, UPDATE Y DELETE) sin obtener ningún beneficio en la instrucción SELECT.

Una de las ventajas de las vistas indexadas radica en que mejoran el rendimiento de operaciones de combinación y agregación. Si realizamos frecuentemente este tipo de operaciones, la vista indexada por su naturaleza nos permite tener el resultado obtenido de forma directa sin ningún cálculo, en contraposición a una consulta que tuviera que realizar todas esas operaciones en el momento.


Giménez, Damián. Mat.: 3601-0208
Giménez Romero, Noelia Mariana. Mat.: 3601-0208
Vojnovic, Alan. Mat.: 3601-1969
Barletta, Damian. Mat.: 3501-2483
Quiroz, Sergio. Mat.: 37010149
Kruk, Osvaldo. Mat: 13240191

En conclusión a lo anterior,  lo que se busca es la optimización de las consultas a través de la implementación de vistas que contengan índices agrupados y no agrupados.

Los índices según como se utilicen benefician la velocidad de la consulta, la manera de realizar los cambios en la misma y los costos de mantenimiento.  Es decir, son bueno para:

No es una tarea fácil seleccionar los índices que vamos a utilizar, por que se deben tomar en cuenta los índices de las tablas subyacentes. Es por eso, que este proceso de selección no se debe realizar de manera aislada y así mismo tomar en cuenta aspectos tales como:

La implementación de software como SQL Server y SQL Server Enterprise Edition nos ayuda en el proceso de creación de vistas indexadas y optimización de consultas.

Esto se ve reflejado a la hora de reducir costos de mantenimiento limitando las vistas a través de la cláusula where, en donde el SQL Server solo necesita gestionar la actividad general del número de filas de una vista indexada o a la hora de querer realizar modificaciones sobre aplicaciones existentes en donde con la ayuda de El SQL Server 2000/2005 Enterprise Edition, es posible.

De esta manera, nos queda claro que la optimización de consultas se relaciona con la creación de vistas indexadas, en donde no solo depende la habilidad que tengamos para diseñarlas sino que también de la habilidad a la hora de implementar cláusulas y seleccionar índices. Además,  la optimización depende de las herramientas que utilicemos para llevarla a cabo.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: