Pregunta

He estado corriendo una herramienta de auto-índice en nuestra base de datos MS SQL (I modificado una secuencia de comandos procedentes de Microsoft que se ve en las tablas estadísticas de índice - Automated automático de indexación ). A partir de las estadísticas, ahora tengo una lista de recomendaciones para los índices que necesitan crear.

Editar Los índices descritos anteriormente para llevar la información del DMV de que le diga lo que el motor de base de datos sería utilizar para los índices si estaban disponibles y las secuencias de comandos toman el top X recomendaciones (por busca , el impacto de usuario, etc.) y las puso en una tabla.

(Edición anterior parcialmente tomado de la respuesta de Larry Coleman a continuación con el fin de aclarar lo que los guiones están haciendo)

Como soy nuevo al administrador de base de datos, y después de haber tenido una rápida búsqueda en la red, me resisto a dar el paso y añadir ciegamente los índices recomendados. Sin embargo, no se vive en el campo, estoy buscando algunos consejos sobre cómo determinar si las recomendaciones son necesarias o no.

¿Es necesario para ejecutar el Analizador de SQL, o es mejor examinar el código que consulta las tablas? ¿Y tiene algún otro consejo?

Otros consejos

Existen algunos conceptos y términos que son importantes para entender cuando se trata de índices. Busca, exploraciones y búsquedas son algunas de las formas en que los índices serán utilizados a través de sentencias de selección. La selectividad de columnas de clave es esencial para determinar la eficacia de un índice puede ser.

Un buscan sucede cuando el optimizador de consultas SQL Server determina que la mejor manera de encontrar los datos que ha solicitado está escaneando un rango dentro de un índice. Busca por lo general ocurre cuando una consulta está "cubierta" por un índice, lo que significa que la buscan predicados están en la clave del índice y las columnas que se muestran son o bien en la clave o incluido. Una exploración sucede cuando el optimizador de consultas SQL Server determina que la mejor manera de encontrar los datos es escanear todo el índice y luego filtrar los resultados. Una búsqueda se produce normalmente cuando un índice no incluye todas las columnas solicitadas, ya sea en la clave de índice o en las columnas incluidas. El optimizador de consulta se use la clave de clúster (contra un índice agrupado) o el RID (contra un montón) de "búsqueda" las otras columnas solicitados.

Por lo general, buscan operaciones son más eficientes que las exploraciones, debido a consultar físicamente a un conjunto de datos más pequeña. Hay situaciones en las que esto no es el caso, como un pequeño conjunto de datos inicial, pero que va más allá del alcance de su pregunta.

Ahora, se pedirá la forma de determinar la eficacia de un índice es, y hay algunas cosas a tener en cuenta. columnas de clave de un índice agrupado se llaman una clave de agrupación. Así es como los registros se hacen único en el contexto de un índice agrupado. Todos los índices no agrupados incluirán la clave agrupada por defecto, con el fin de realizar búsquedas cuando sea necesario. Todos los índices se insertarán a, actualizados a, o se suprimirán de instrucción DML para cada respectiva. Dicho esto, lo mejor para mejoras en el rendimiento de equilibrio en las sentencias SELECT contra golpes de rendimiento de inserción, y las instrucciones de actualización de borrado es.

Con el fin de determinar la eficacia de un índice es, se debe determinar la selectividad de sus claves de índice. La selectividad se puede definir como un porcentaje de registros distintos a los registros totales. Si tengo una tabla [persona] con 100 registros totales y la columna [FIRST_NAME] contiene 90 valores distintos, podemos decir que la columna [FIRST_NAME] es 90% selectiva. Cuanto mayor es la selectividad, más eficiente será la clave de índice. Mantener la selectividad en mente, lo mejor es poner sus columnas más selectivas en su primera clave de índice. Usando mi anterior [persona] ejemplo, qué pasaría si tuviéramos un [apellidos] columna que fue del 95% selectiva? Nos gustaría crear un índice con [apellidos], [nombre apellido] como la clave del índice.

Sé que esto fue un poco la respuesta de largo aliento, pero en realidad hay un montón de cosas que van a determinar qué tan efectiva será un índice, y mucho cosas que deben sopesar cualquier beneficio de rendimiento en contra.

He descubierto recientemente una escritura libre fantástico de la gente en BrentOzar Unltd http://www.brentozar.com/blitzindex/

Esto hace un análisis bien de los que existen índices, la frecuencia con que se utilizan y con qué frecuencia el motor de consulta está en busca de un índice que no existe.

Es orientación es generalmente bueno. A veces se pone un poco demasiado sugerente de ideas. He hecho generalmente lo siguiente hasta el momento:

  • Se han eliminado los índices que nunca se han leído (o tal vez menos de 50 veces al mes).
  • añaden los índices más evidentes en las claves externas y campos que conozco que utilizamos mucho.

No se han añadido todos los índices recomendados, y se han vuelto una semana después de encontrar que ya no se recomiendan ya que el motor de consulta es el uso de algunos de los otros nuevos índices lugar!

En general, se debe evitar índices en:

  • los cuadros muy pequeños (menos de 50 a 200 registros):. Menudo el motor de consulta es más rápida si se recorre la tabla en lugar de carga hasta el índice, leer, etc procesarlo
  • Evita índices en columnas con baja cardinalidad ( http://en.wikipedia.org/wiki/Cardinality_(SQL_statements) ) en la columna mencionada en primer lugar. P.ej. La indexación de un campo de género (M / F) es de muy poco uso, es tan práctico para explorar la tabla y encontrar el ~ 50% de ese partido. Si aparece en la lista después de algo más específico en el índice (por ejemplo, [fecha de nacimiento, sexo]) que es mejor -. Es posible que desee todos los varones nacidos en un período de tiempo determinado

índices agrupados son buenos - normalmente estos se basan en su clave primaria. Ellos ayudan al motor de base de poner los datos en el disco en buen estado. Muy esencial para entender esto para las mesas más grandes como un buen índice agrupado a menudo reduce el espacio ocupa la tabla.

Me han reducido algunas tablas de 900MB a 400MB, sólo porque eran montones unstructed de antemano. http://msdn.microsoft.com/en-us/library/aa933131 (v = sql.80) .aspx

Reorganize / Reconstruir

Se debe buscar para comprobar si hay índices fragmentados. Un poco de fragmentación está bien, no te obsesivo! http://technet.microsoft.com/en-us/library/ms189858.aspx Saber la diferencia entre reorganizar y reconstruir!

Revisión Regularmente

Las consultas cambio, el cambio de volúmenes de datos, se añaden nuevas características, los antiguos eliminado. Usted debe buscar en ellos una vez al mes (o más a menudo si usted tiene altos volúmenes) y en busca de donde se puede ayudar a la base de datos fuera!

¿Cuántas

En un reciente video Brent recomienda (por lo general) no más 5 índices en una tabla con una gran cantidad de escritura (por ejemplo tabla de pedidos), y no más de 10 si se trata de leer mucho más de escrito (es decir, la tabla de registro para el análisis) http://www.youtube.com/watch?v=gOsflkQkHjg

general

Depende!

Su kilometraje varía de acuerdo a la base de datos. Cubrir el (apellido del empleado, fecha de pedido, etc.) obvia en su (ahora / futuro) mesas más grandes. Supervisar, revisar y ajustar según sea necesario. Debe ser parte de su lista de comprobación de rutina cuando la gestión de su base de datos (s):)

Espero que esto ayude!

Normalmente uno va teniendo una carga de trabajo específica (consultas) y probar cuidadosamente el impacto de cada nuevo índice sobre la carga de trabajo. Este proceso iterativo debe incluir siempre un cuidadoso análisis de los planes de ejecución, que revelarían lo que se utilizan índices. El tema de análisis de una consulta es muy largo, y empezando por el capítulo dedicado MSDN una consulta es una apuesta buena.

A veces, cuando la carga de trabajo es demasiado complejo o el conocimiento del diseño de la base de datos es una vaga utiliza el motor de base de Asistente para la optimización , que hace un análisis automático de su carga de trabajo y propone una serie de índices. Las propuestas deben, por supuesto, ser cuidadosamente analizados y el impacto debe medirse inmediatamente.

Así que si usted sigue mi idea, la adición de un índice y la medición del impacto es realmente sólo un caso de prueba A / B : ejecuta su carga de trabajo w / o el índice como una línea de base, a continuación, se ejecuta con el índice, medir y comparar con la línea de base y luego decidir, basándose en las métricas observados y medidos, si el impacto es beneficioso. La carga de trabajo es el mejor de un conjunto de pruebas de buena calidad, pero también puede ser una repetición de una carga de trabajo capturado, consulte Cómo a:. reproducir una del archivo de rastreo

Una respuesta más sintética es mirar a la vista sys.dm_db_index_usage_stats y ver cómo son los índices de bienestar utilizado, pero eso es por lo general un enfoque para hacer análisis in situ en una carga de trabajo desconocido (es decir. un consultor llamado para ayuda probablemente comenzaría con esto).

A partir de SQL 2005, SQL Server tiene DMV 's que le dirá lo que el motor de base de datos podría utilizar para los índices si estuvieran disponibles. Los puntos de vista se puede decir qué columnas deben ser columnas de clave, las columnas que deben ser incluidos, y lo más importante, ¿cuántas veces se habría utilizado el índice.

Un enfoque sería bueno para ordenar la consulta de índices que faltan por número de búsquedas, y considerar la adición de los índices principales primero.

Ver también: el funcionario MS DMV docs

Depende de cómo se utiliza esa tabla. p.ej. digamos que tengo una tabla que se lee un montón de veces, pero actualizaciones e inserciones son raros. Además de que siempre se consulta la tabla en alguna columna de clave externa. Tendrá sentido para crear índice (no agrupados) sobre esa clave externa para acelerar las consultas de lectura. Pero la desventaja es que su inserción, actualización llegará a ser lenta.

Hay pocas consultas estadísticas, que indican cómo las consultas de tiempo mucho más están tomando. Comience con los más lentos. Si el predicado de la consulta no tiene ningún índice, creando una ayuda voluntad.

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