对表的CUD *** 作导致出现不连续行级块出现,也就是传说中的碎片,这时需要对索引重建,也就是把分配的空块干掉。
SELECT OBJECT_name(dt.object_ID) , si.name ,226); color:inherit; line-height:18px"> dt.avg_fragmentation_in_percent, dt.avg_page_space_used_in_percent FROM (SELECT object_ID ,226); color:inherit; line-height:18px"> index_ID ,226); color:inherit; line-height:18px"> avg_fragmentation_in_percent,226); color:inherit; line-height:18px"> avg_page_space_used_in_percent FROM sys.dm_db_index_physical_stats (DB_ID(), NulL, 'DETAILED') WHERE index_ID <> 0 ) AS dt --does not return information about heaps INNER JOIN sys.indexes si ON si.object_ID = dt.object_ID AND si.index_ID = dt.index_ID --------------------------------------------------------------------------------------------内部碎片和外部碎片
为了有效的利用内存,使内存产生更少的碎片 所以要对内存分页 。内存以页单位使用。因为在使用分页装载的过程中经常检查使用的页数也产生的碎片称内部碎片。
为了共享要分段 在段的切换过程中形成的碎片称外部碎片。
什么时候该索引重组
*检查 Externalfragmentation 部分
o 当avg_fragmentation_in_percent 的值介于 10 到 15 之间
*检查 Internalfragmentation 部分
o 当avg_page_space_used_in_percent 的值介于 60 到 75 之间
什么时候该索引重建
*检查 Externalfragmentation 部分
o 当avg_fragmentation_in_percent 的值大于 15
*检查 Internalfragmentation 部分
o 当avg_page_space_used_in_percent 的值小于 60
建立动态视图。
SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' + CASE WHEN ps.avg_fragmentation_in_percent > 15 THEN 'REBUILD' ELSE 'REORGANIZE' END + WHEN pc.partition_count > 1 THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX)) ELSE '' END, avg_fragmentation_in_percent FROM sys.indexes AS ix JOIN sys.tables t ON t.object_ID = ix.object_ID JOIN sys.schemas s ON t.schema_ID = s.schema_ID JOIN (SELECT object_ID ,226); color:inherit; line-height:18px"> index_ID , avg_fragmentation_in_percent,226); color:inherit; line-height:18px"> partition_number FROM sys.dm_db_index_physical_stats (DB_ID(),128); background-color:inherit">NulL) ) ps ON t.object_ID = ps.object_ID AND ix.index_ID = ps.index_ID (SELECT object_ID,226); color:inherit; line-height:18px"> index_ID ,226); color:inherit; line-height:18px"> COUNT(disTINCT partition_number) AS partition_count FROM sys.partitions GROUP BY object_ID,226); color:inherit; line-height:18px"> index_ID ) pc ON t.object_ID = pc.object_ID AND ix.index_ID = pc.index_ID WHERE ps.avg_fragmentation_in_percent > 10 AND ix.name IS NOT NulL 对查询出的建果进行重建 /* avg_fragmentation_in_percent ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------- ALTER INDEX [PK__tb1__3213E83F33139D18] ON [dbo].[tb1] REBUILD PARTITION = 2 50 ALTER INDEX [pk_cludered_ID_date] ON [dbo].[consume] REBUILD 27.9693855911781 (2 行受影响) */ 总结以上是内存溢出为你收集整理的ms sqlserver 索引(在MSSQL 2008上试通过,2005需自行测试)全部内容,希望文章能够帮你解决ms sqlserver 索引(在MSSQL 2008上试通过,2005需自行测试)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)