`
zheyiw
  • 浏览: 1017481 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SqlServer重建索引

 
阅读更多
SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130); 
DECLARE @objectname nvarchar(130); 
DECLARE @indexname nvarchar(130); 
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command nvarchar(4000); 
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function 
-- and convert object and index IDs to names.
SELECT
    object_id AS objectid,
    index_id AS indexid,
    partition_number AS partitionnum,
    avg_fragmentation_in_percent AS frag
INTO #work_to_do
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;
 
-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;
 
-- Open the cursor.
OPEN partitions;
 
-- Loop through the partitions.
WHILE (1=1)
    BEGIN;
        FETCH NEXT
           FROM partitions
           INTO @objectid, @indexid, @partitionnum, @frag;
        IF @@FETCH_STATUS < 0 BREAK;
        SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
        FROM sys.objects AS o
        JOIN sys.schemas as s ON s.schema_id = o.schema_id
        WHERE o.object_id = @objectid;
        SELECT @indexname = QUOTENAME(name)
        FROM sys.indexes
        WHERE  object_id = @objectid AND index_id = @indexid;
        SELECT @partitioncount = count (*)
        FROM sys.partitions
        WHERE object_id = @objectid AND index_id = @indexid;
 
-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
        IF @frag < 30.0
            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
        IF @frag >= 30.0
            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
        IF @partitioncount > 1
            SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
        EXEC (@command);
        PRINT N'Executed: ' + @command;
    END;
 
-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;
 
-- Drop the temporary table.
DROP TABLE #work_to_do;
GO
分享到:
评论

相关推荐

    提高SQL Server性能,可通过DBCC DBREINDEX重建索引

    ### 提高SQL Server性能:通过DBCC DBREINDEX重建索引 #### 一、引言 在数据库管理系统中,SQL Server作为一款广泛使用的数据库产品,其性能优化是确保应用程序高效运行的关键因素之一。其中,索引是提升查询速度的...

    sql server 重新组织和重新生成索引

    SQL Server 重新组织和重新生成索引 在 SQL Server 中,索引的碎片可能会对查询性能产生影响,因此需要对索引进行维护。SQL Server 2005 提供了重新组织和重新生成索引的功能,以修复索引碎片。 重新组织索引 ...

    SQL server数据库通过代码命令重建所有表索引

    适用于SQL server 2008 R2版本及以上,重建全部索引

    SQL Server 2000数据库中如何重建索引

    在SQL Server 2000中,有两种主要的方式来重建索引:使用`CREATE INDEX`语句的`DROP_EXISTING`子句,以及使用`DBCC DBREINDEX`语句。 1. `CREATE INDEX` with `DROP_EXISTING`: 这种方法允许你在不删除旧索引的...

    SQL Server索引重建手册

    《SQL Server索引重建手册》详细介绍了如何查看和分析索引碎片,如何选择在线重建索引的方式,以及如何观察索引重建的进度。手册强调了操作前必须进行全库备份的重要性,并指出在线重建索引时应遵循的顺序和原则。...

    SQL Server 2000完结篇系列之七:SQL Server 2000索引优化详解

    当索引碎片过高时,可能需要重建索引来恢复其性能。 六、索引的影响 索引对读操作有显著提升,但可能降低写操作速度,如插入、删除和更新。因此,在设计索引时,需要平衡读写操作的需求。 七、查询优化器与索引...

    sql 2000重建索引收缩数据库

    根据提供的文件信息,本文将详细解析SQL Server 2000中重建索引与收缩数据库的相关知识点。 ### 一、重建索引 #### 1. 什么是索引 在SQL Server 2000中,索引是提高数据检索速度的重要工具。它可以看作是一种特殊...

    SQLServer索引碎片和解决方法

    SQLServer中的索引碎片是影响数据库性能的重要因素,它分为外部碎片和内部碎片两种类型。外部碎片发生在索引页不在其逻辑顺序上时,导致查询过程中需要额外的页切换,尤其是对于返回有序结果集的查询,这将显著降低...

    重建索引语句.txt

    重新修复数据库索引, PRINT '重建表' + @TableName +'的索引........Start!'

    优化SQL Server索引的小技巧

    优化 SQL Server 索引的小技巧 SQL Server 中有多种可以让您检测、调整和优化 SQL ...如果你不想自动维护索引,那么你可以手工重建索引,并在需要时执行 UPDATE STATISTICS 命令来刷新 SQL Server 对于该索引的信息。

    关于SQL Server中索引使用及维护简介

    在SQL Server中,索引是提升数据库性能的关键因素,它们帮助快速定位数据,减少磁盘I/O操作,从而加速查询速度。本篇文章将探讨聚簇索引、非聚簇索引以及覆盖索引的使用和维护策略。 1. **聚簇索引**:聚簇索引决定...

    SqlServer性能优化高效索引指南.pdf

    重新组织索引可以提高索引的存储效率,重建索引可以解决索引碎片的问题,压缩索引可以减少存储空间。 索引的维护方法包括索引的重整、索引的重建、索引的压缩等。索引的重整可以解决索引碎片的问题,索引的重建可以...

    SQL Server磁盘空间清理及过引重建

    SQL Server磁盘空间清理及过引重建

    SQLServer 索引查询优化指南

    **SQLServer索引查询优化指南** SQLServer是一个广泛使用的数据库管理系统,尤其在企业级应用中,性能优化至关重要。本指南将深入探讨SQLServer中的索引原理及其对查询优化的影响。索引是数据库性能的关键因素,它...

    SqlServer性能优化高效索引指南

    SqlServer通过索引碎片整理来优化性能,方法包括重整(REORGANIZE)和重建(REBUILD)。重整是联机对叶级页进行物理排序,重建则是重新构建索引结构。此外,填充因子(FILLFACTOR)的设置也会影响索引页的使用效率和...

    Sql Server 数据库索引整理语句,自动整理数据库索引

    如果碎片化程度高,则可能需要重建索引(`ALTER INDEX REBUILD`),这将完全重新创建索引,可能包括重新排序和压缩数据,但成本较高。如果索引跨越多个分区,重建操作还可以指定分区,以处理特定部分。 此脚本提供...

    SQLServer索引设计经验谈

    ### SQL Server索引设计经验谈 #### 摘要 本文旨在探讨Microsoft SQL Server中的索引设计技巧,尤其是如何通过合理的索引策略来优化查询性能。通过对聚集索引与非聚集索引的选择、索引列的排序方式、填充因子的...

    SQL SERVER 2008 R2 重建索引的方法

    检查索引碎片情况 1.SELECT 2.OBJECT_NAME(object_id) as objectname, 3.object_id AS objectid, 4.index_id AS indexid, 5.partition_number AS partitionnum, 6.avg_fragmentation_in_percent AS fra 7.FROM sys....

Global site tag (gtag.js) - Google Analytics