• 第十章——维护索引(3)——通过重建索引提高性能


    /*
    首先先要决定是否达到了重建索引的临界值。否则,重组索引会更好。当碎片超过%,那么重建索引会比较好。
    重建索引有两种方式,在重建之前应该考虑使用哪种会更好:
    1、脱机:脱机重建索引是默认选项。它会锁住整个表,知道重建结束,没有人可以访问这个表。如果表非常大,这将持续几个小时甚至更久。但是它运行得更快,并且占用Tempdb的资源更少。
    2、联机:如果环境不允许脱机,那么可以使用联机重建,但是会占用非常多的资源,如果表数据类型为varchar(max),nvarchar(max)和text类型,将不会在联机模式下工作。
    注意:是否联机重建索引只有开发版和企业版可用。其他版本只有脱机重建。
    */
    --使用联机方式重建索引idx_refno   
    ALTER INDEX [i_store_c_wareid] ON [u_store_c] REBUILD WITH (FILLFACTOR=80,ONLINE =ON)  
    GO  
      
    --使用脱机方式重建索引idx_refno   
    ALTER INDEX [i_store_c_wareid] ON [u_store_c] REBUILD WITH (FILLFACTOR=80,ONLINE =OFF)  
    GO  
      
    --使用脱机方式重建表上所有索引: 
    ALTER INDEX ALL ON [u_store_c] REBUILD WITH (FILLFACTOR=80,ONLINE =OFF )  
    GO  
      
    --使用DROP_EXISTING 来重建索引: 
    CREATE CLUSTERED INDEX [i_store_c_wareid] ON [u_store_c](wareid)  
    WITH (DROP_EXISTING=ON ,FILLFACTOR=70,ONLINE=ON )  
    GO  
      
    --使用DBCC DBREINDEX重建标上所有索引: 
    DBCC DBREINDEX('u_store_c')  
    GO  
      
    --重建带有填充因子的索引: 
    DBCC DBREINDEX('u_store_c','i_store_c_wareid',90)  
    GO  
    
    /*
    2、注意,DBCC DBREINDEX命令将在未来版本删除,所以不建议使用,并尽快改成其他方式实现。
     
    分析:
    在重建索引时,会锁住资源,直到进程完毕为止。重建会移除空白或者未使用的页,创建新的页,如果达到填充因子的限定,会分页,并以B-TREE方式存放这些数据页。
     
    扩充信息:
    基于个人经验,建议重建大表的索引时,把恢复模式改成大容量日志或者简单模式,避免日志文件的过度增长。但是更改恢复模式应该慎重,并在更改后立即做日志备份。
    因为重建大表索引会非常耗时,所以不要不耐烦并停止重建操作,这样会引起一些危险的后果,并可能使得数据库进入恢复模式。
    重建索引需要有sysadmin、db_onwer或者db_ddladmin角色。
    */
  • 相关阅读:
    [LeetCode] Search in Rotated Sorted Array II
    [LeetCode] Search in Rotated Sorted Array
    [LeetCode] Rotate List
    [LeetCode] Rotate Array
    [LeetCode] Product of Array Except Self
    [LeetCode] Recover Binary Search Tree
    [LeetCode] Jump Game II
    [LeetCode] Jump Game
    [LeetCode] Delete Node in a Linked List
    [LeetCode] Climbing Stairs
  • 原文地址:https://www.cnblogs.com/binghou/p/9109482.html
Copyright © 2020-2023  润新知