ms sqlserver 索引(在MSSQL 2008上试通过,2005需自行测试)

ms sqlserver 索引(在MSSQL 2008上试通过,2005需自行测试),第1张

概述对表的CUD *** 作导致出现不连续行级块出现,也就是传说中的碎片,这时需要对索引重建,也就是把分配的空块干掉。 SELECT OBJECT_NAME(dt.object_id)      ,                 si.name                        ,                 dt.avg_fragmentation_in_percent,        

对表的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需自行测试)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存