miércoles, 24 de agosto de 2011

Indices en SQL Server 2008 R2

Generalmente en nuestras tablitas creamos indices para un mejor rendimiento de nuestras querys, sin embargo algo curioso que sucede en tablas que tienen mas de 1 millon de registros es que los indices podrían ser perjudiciales en el caso explicito de eliminar. Vamos al grano, esta query construye la sentencia para deshabilitar los indices de una tabla.

declare @DisableQuery varchar(max) = ''
select @DisableQuery = COALESCE(@DisableQuery +'','')
+ 'alter index ' +i.name+ ' on ' +o.name+ ' disable '+ CHAR(13)+Char(10)+'; '
From sys.indexes i
Inner Join sys.objects o On o.object_id = i.object_id
Where o.is_ms_shipped = 0
and i.index_id >= 1 and i.is_primary_key = 0
and o.name = 'NombreDeMiTabla'
select @DisableQuery
exec(@DisableQuery)



posterior a esto podemos realizar la elminacion de miles de filas de nuestra tabla de mas de 1 millon de registros, luego la dejamos intacta como anteriormente estaba, habilitamos los indices.

declare @EnableQuery varchar(max) = ''
select @EnableQuery = COALESCE(@EnableQuery +'','')
+ 'alter index ' +i.name+ ' on ' +o.name+ ' rebuild '+ CHAR(13)+Char(10)+'; '
From sys.indexes i
Inner Join sys.objects o On o.object_id = i.object_id
Where o.is_ms_shipped = 0
and i.index_id >= 1 and i.is_primary_key = 0
and o.name = 'NombreDeMiTabla'
select @EnableQuery
exec(@EnableQuery)


No hay comentarios: