proyectos ejemplos tsql sql-server-2012 database-tuning-advisor

tsql - ejemplos - ¿Debo eliminar los índices hipotéticos?



django (2)

Me di cuenta de que existen índices hipotéticos en una determinada base de datos. He buscado y parece que este tipo de índices son creados por Tuning Advisor y no siempre se eliminan.

Hay varios temas, incluida la documentación oficial de cómo borrar / borrar estos indexados, pero no pude encontrar si estos índices tienen algún impacto en el servidor.

Lo que compruebo usando el script a continuación es que no hay información de tamaño sobre ellos:

SELECT OBJECT_NAME(I.[object_id]) AS TableName ,I.[name] AS IndexName ,I.[index_id] AS IndexID ,8 * SUM(A.[used_pages]) AS ''Indexsize(KB)'' FROM [sys].[indexes] AS I INNER JOIN [sys].[partitions] AS P ON P.[object_id] = I.[object_id] AND P.[index_id] = I.[index_id] INNER JOIN [sys].[allocation_units] AS A ON A.[container_id] = P.[partition_id] WHERE I.[is_hypothetical] = 1 GROUP BY I.[object_id] ,I.[index_id] ,I.[name] ORDER BY 8 * SUM(A.[used_pages]) DESC

y al tenerlos, he decidido verificar si hay alguna información de uso sobre ellos para poder dejar estos que a menudo se usan, pero nuevamente no se devolvió nada. (He usado las "Estadísticas de uso de índices existentes" de este artículo ).

¿Alguien podría decir por qué mantener estos índices es incorrecto y si puedo definir cuál de ellos debería mantenerse?


Solo elimínalos, en realidad no ocupan ningún espacio ni causan ningún golpe / beneficio de rendimiento, pero si estás mirando qué índices están definidos en una tabla y te olvidas de excluir índices hipotéticos, podría causar cierta confusión. también en el caso improbable de que intente crear un índice con el mismo nombre que uno de estos índices, fallará ya que ya existe.


Simplemente USE la base de datos que desea limpiar y ejecute esto:

DECLARE @sql VARCHAR(MAX) = '''' SELECT @sql = @sql + ''DROP INDEX ['' + i.name + ''] ON [dbo].['' + t.name + '']'' + CHAR(13) + CHAR(10) FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE i.is_hypothetical = 1 EXECUTE sp_sqlexec @sql