sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Ubrugt Index

Hej,

SQL Server DBA bør overvåge alle indekser og hvilke af indekser der bruger og hvilke der ikke gør.

Hvis indekset ikke bruger eller bruger meget sjældent, bør SQL Server DBA droppe det for ikke at give ekstra belastning til databasen.

Du kan finde alle indeksers brugsstatistik med følgende script. Script vil også generere drop index script, du kan bruge dette script til at droppe indeks sikkert.

SELECT 
o.name
, indexname=i.name
, i.index_id   
, reads=user_seeks + user_scans + user_lookups   
, writes =  user_updates   
, rows = (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id)
, CASE
	WHEN s.user_updates < 1 THEN 100
	ELSE 1.00 * (s.user_seeks + s.user_scans + s.user_lookups) / s.user_updates
  END AS reads_per_write
, 'DROP INDEX ' + QUOTENAME(i.name) 
+ ' ON ' + QUOTENAME(c.name) + '.' + QUOTENAME(OBJECT_NAME(s.object_id)) as 'drop statement'
FROM sys.dm_db_index_usage_stats s  
INNER JOIN sys.indexes i ON i.index_id = s.index_id AND s.object_id = i.object_id   
INNER JOIN sys.objects o on s.object_id = o.object_id
INNER JOIN sys.schemas c on o.schema_id = c.schema_id
WHERE OBJECTPROPERTY(s.object_id,'IsUserTable') = 1
AND s.database_id = DB_ID()   
AND i.type_desc = 'nonclustered'
AND i.is_primary_key = 0
AND i.is_unique_constraint = 0
AND (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id) > 10000
ORDER BY reads;



  1. Sådan bruges AI til SQL Tuning til en rigtig automatiseret proces

  2. Forbinder Android med MS SQL SERVER 2008

  3. FrankenQueries:når SQL og NoSQL kolliderer

  4. Sådan erstattes en streng i en SQL Server-tabelkolonne