Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Índice ausente do SQL Server


Oi,

O uso do Index no banco de dados do SQL Server ocorre em ambientes que exigem maior desempenho, velocidade e economia de memória.







Em uma tabela com milhões ou bilhões de registros, podemos usar um índice para ler menos registros e pesquisar menos para encontrar registros relacionados.

Índice criado com precisão, milhões de registros dentro do banco de dados que pesquisamos em um tempo muito curto para trazer o registro da conveniência do chamador, enquanto ao mesmo tempo ler menos o registro, atingindo o registro de destino, usamos os recursos do sistema operacional de forma eficaz.

Você deve criar índice principalmente para consultas somente leitura em uma tabela. Se as operações de exclusão e atualização forem mais do que consultas somente leitura, você não deve criar o índice dessa tabela.

Você pode examinar a recomendação de índice ausente do SQL Server com o script a seguir. Você pode criar um índice ausente, mas você deve monitorar esses índices. Se eles não forem úteis, você deve eliminá-los.


SELECT MID.[statement] AS ObjectName
,MID.equality_columns AS EqualityColumns
,MID.inequality_columns AS InequalityColms
,MID.included_columns AS IncludedColumns
,MIGS.last_user_seek AS LastUserSeek
,MIGS.avg_total_user_cost 
* MIGS.avg_user_impact 
* (MIGS.user_seeks + MIGS.user_scans) AS Impact
,N'CREATE NONCLUSTERED INDEX <TYPE_Index_Name> ' + 
N'ON ' + MID.[statement] + 
N' (' + MID.equality_columns 
+ ISNULL(', ' + MID.inequality_columns, N'') +
N') ' + ISNULL(N'INCLUDE (' + MID.included_columns + N');', ';')
AS CreateStatement
FROM sys.dm_db_missing_index_group_stats AS MIGS
INNER JOIN sys.dm_db_missing_index_groups AS MIG
ON MIGS.group_handle = MIG.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS MID
ON MIG.index_handle = MID.index_handle
WHERE database_id = DB_ID()
AND MIGS.last_user_seek >= DATEDIFF(month, GetDate(), -1)
ORDER BY Impact DESC;