您的位置:首页 > 数据库 > SQL

SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>

2017-06-01 14:13 495 查看
sqlserver  sql:

SELECT index_type_desc,alloc_unit_type_desc,avg_fragmentation_in_percent,fragment_count,avg_fragment_size_in_pages,

page_count,record_count,avg_page_space_used_in_percent

FROM sys.dm_db_index_physical_stats(DB_ID('puyun_analysis_5'),OBJECT_ID('sms_control'),NULL,NULL,'Sampled')

关于索引的一些优化点和解释:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html

DBCC SHOWCONTIG (sms_control)

关于索引碎片的查看,可以通过以下DMV语句进行 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

SELECT 

DB_NAME() AS DatbaseName 

, SCHEMA_NAME(o.Schema_ID) AS SchemaName 

, OBJECT_NAME(s.[object_id]) AS TableName 

, i.name AS IndexName 

, ROUND(s.avg_fragmentation_in_percent,2) AS [Fragmentation %] 

INTO #TempFragmentation 

FROM sys.dm_db_index_physical_stats(db_id(),null, null, null, null) s 

INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] 

AND s.index_id = i.index_id 

INNER JOIN sys.objects o ON i.object_id = O.object_id 

WHERE 1=2 

EXEC sp_MSForEachDB 'USE [?]; 

INSERT INTO #TempFragmentation 

SELECT TOP 20 

DB_NAME() AS DatbaseName 

, SCHEMA_NAME(o.Schema_ID) AS SchemaName 

, OBJECT_NAME(s.[object_id]) AS TableName 

, i.name AS IndexName 

, ROUND(s.avg_fragmentation_in_percent,2) AS [Fragmentation %] 

FROM sys.dm_db_index_physical_stats(db_id(),null, null, null, null) s 

INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] 

AND s.index_id = i.index_id 

INNER JOIN sys.objects o ON i.object_id = O.object_id 

WHERE s.database_id = DB_I
4000
D() 

AND i.name IS NOT NULL 

AND OBJECTPROPERTY(s.[object_id], ''IsMsShipped'') = 0 

ORDER BY [Fragmentation %] DESC' 

SELECT top 20 * FROM #TempFragmentation ORDER BY [Fragmentation %] DESC 

DROP TABLE #TempFragmentation
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: