MSSQL索引碎片>30%的时候需要进行重建索引操作(DBCC DBREINDEX(TABLE_ID)),但是对于表记录数上百万的情况下,此操作非常的慢,请问有没有什么好的方法解决此问题?请指教!备注:硬件设备都算比较好

解决方案 »

  1.   

    如果是 SQL Server 2005,
    可以考虑使用 ALTER INDEX ... REBUILD WITH SORT_IN_TEMPDB=ON, MAXDOP=1 语句重建索引。SORT_IN_TEMPDB 选项指定在重建索引时将中间排序结果存储在 tempdb 数据库中,而默认是存储在索引所在的文件组中。如果 tempdb 数据库存储在与用户数据库不同的磁盘或阵列上,此选项可以提升重建索引的性能。MAXDOP 选项指定用于重建索引的 CPU 数,为 1 表示强制并行(使用所有的 CPU)重建索引。这个需要是 SQL Server 2005 企业版。
      

  2.   


    NONONO,MAXDOP 为1表示只使用1颗CPU,取消并行。重建索引很耗CPU,I/O资源是肯定的,所以要尽量避免在生产时间做。另外,重建索引会产生大量的LOG日志,缩短备份时间或者Rebuild index期间Recovery Mode改成Simple然后再改回来,都是不错的办法。