2012-09-14 31 views
18

estoy afinando mi servidor SQL y cuando muestro mi plan de ejecución de una de mis preguntas en la parte superior se lee:Missing Índice detalles SQL

"Missing Índice (Impacto 99,7782): CREATE INDEX ... NONCLUSTERED"

Así que miré a los detalles del índice que faltan y que está mostrando esta:

/* 
Missing Index Details from ExecutionPlan1.sqlplan 
The Query Processor estimates that implementing the following index could improve the query cost by 99.7782%. 
*/ 

/* 
USE [phsprod] 
GO 
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>] 
ON [dbo].[address] ([userid]) 

GO 
*/ 

Sólo he estado trabajando con SQL para alrededor de un mes y nunca he hecho nada con esto, ya todos mis tablas tienen sido construido para mí ya. ¿Alguien puede ayudarme a explicar/darme alguna idea sobre qué hacer con esto? Gracias.

+4

Tenga en cuenta que los índices reducen el tiempo dedicado al procesamiento de consultas a un pequeño costo de mantenimiento (por el sistema) cuando los contenidos de la tabla se modifican (agregan, eliminan, actualizan) y no son necesariamente pequeños en espacio en disco. además de un costo generalmente no cuantificable en términos del tiempo extra que lleva analizar los planes de consulta cuando hay más índices que considerar. En general, los índices son buenos; demasiados índices pueden ser un problema. Use discreción al agregarlos. –

Respuesta

22

Eso significa que SQL Server está sugiriendo que su consulta podría ejecutarse más rápido con un índice. Los índices agregan sobrecarga y almacenamiento en disco, por lo que debe ignorar esta sugerencia a menos que la consulta esté dando problemas de rendimiento en la producción.

para crear el índice, elimine la declaración después de use, reemplace [<Name of Missing Index, sysname,>] con un nombre real, y ejecutarlo:

USE [phsprod] 
GO 
CREATE NONCLUSTERED INDEX IX_Address_UserId 
ON [dbo].[address] ([userid]) 
+3

+1, aunque yo diría que las recomendaciones de índice deberían tomarse con un grano de sal. Deberían ser aplicados por alguien que administre el esquema de forma centralizada y comprenda * todas * las consultas, no solo esta. – usr

14

Eso significa que SQL Server está sugiriendo que la consulta podría correr más rápido con este índice.

Puede significar que sus índices actuales no son los mejores para la consulta que está ejecutando. Tal vez su consulta podría ser optimizada. O tal vez PODRÍAS agregar el índice. Pero si decides hacer esto, debes analizarlo detenidamente.

De hecho, los índices agregan sobrecarga y almacenamiento en disco. Pero, también puede mejorar el rendimiento. Por ejemplo, si siempre busca en su tabla basado en un "ID de usuario", entonces puede ser rentable agregar un índice en esa columna, ya que SQL podrá buscar este índice.

Piense un poco en esto como si buscara una palabra en un dictionario. Si buscas la palabra "perro", vas a buscar "d" y luego las palabras que comienzan con "do" para finalmente encontrar la palabra "perro".

Si las palabras no estaban en orden alfabético en el dictionario, tendría que buscar todo el diccionario para encontrar la palabra "perro".

Un índice agrupado (o una clave principal) es el orden de sus columnas. En este momento, parece que no tiene un índice en la columna "userid". Entonces SQL Server tiene (probablemente) para escanear toda la tabla hasta que encuentre el ID de usuario.

Si agrega un índice no agrupado, no volverá a ordenar su tabla, pero le indicará a SQL Server qué rango debe buscar para encontrar el ID de usuario que desea. (Como "en el dictionario, entre la página 20 y 30") Por lo tanto, no tendrá que buscar en toda la tabla para encontrarlo.

Pero también significa que cuando agrega datos nuevos a la tabla, o los elimina, o los modifica, necesita mantener su índice actualizado. Generalmente, algunos índices no duelen, pero debe asegurarse de que sean necesarios. No desea agregar demasiados índices, ya que pueden dañar las actuaciones si agrega demasiado.

Y si su tabla contiene solo unos pocos cientos de filas, tal vez no le muestre una gran mejora de las actuaciones. Pero con el tiempo, cuando su mesa crezca, puede hacer la diferencia.

Espero que ayude!

+1

En mi trabajo, tenemos bases de datos muy antiguas con prácticamente ningún índice. Agregar índices en nuestras bases de datos (que puede llegar a ser de 100 y más, con varios cientos de tablas, con a veces más de un millón de filas) realmente ayuda a mejorar las actuaciones. –

+0

Tengo casi 83,000 filas en esa tabla específica en este momento. –

+3

Debe intentar ejecutar algunas consultas con y sin el nuevo índice para ver las diferencias de rendimiento. También puede mostrar el plan de ejecución para ver si es mejor con el nuevo índice. Y también, debe verificar las otras consultas que la aplicación hace en esa tabla. Verifique que también mejore las otras consultas, o al menos, que no empeore el rendimiento de las otras consultas. –