在sql server上重建索引

时间:2011-03-07 09:19:26

标签: sql sql-server indexing sql-server-2008-r2

我在数据库上进行索引重建。 我需要验证它是否已完成。 有人可以指导我。 我正在使用SQL Server 2008 R2

4 个答案:

答案 0 :(得分:7)

如果您正在查找数据库中所有索引和表的详细信息,可以使用。

SELECT OBJECT_NAME(object_id),* 
FROM sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,'SAMPLED')

我刚想到你可能也会问如何知道重新索引的进度。为此你可以使用

SELECT percent_complete 
from sys.dm_exec_requests 
where session_id= <spid of interest>

答案 1 :(得分:1)

如果您已成功重新索引表,则索引碎片将为零(或者如果您有热表,则接近)。您可以使用此脚本检查碎片级别

DECLARE 
@IndexID int,
@TableID int,  
@IndexName varchar(256) 

--Enter index name here
SELECT @IndexName = '<index name>'
--Enter table name here
SET @TableID = OBJECT_ID('<table name>') 

SELECT @IndexID = IndID 
FROM sysindexes 
WHERE 
    id = @TableID 
    AND name = @IndexName 

DBCC SHOWCONTIG (@id, @IndexID)

您在输出中寻找的是名为扫描密度的属性。这应该接近100%。如果没有,那么您的重新索引不完整/成功


如果你有很多表/索引,这可能会变得乏味,所以通过自动生成这样的脚本来短路:

SELECT 'DBCC SHOWCONTIG ' +
    '(' 
       + CONVERT(varchar(32), si.id) + ',' 
       + CONVERT(varchar(32), si.indid) + 
    ')--'  + so.name
FROM sysobjects so 
INNER JOIN sysindexes si 
ON (so.id = si.id) 
WHERE (
    so.type = 'U' AND
    si.indid < 2 AND
    si.id = object_id(so.name) 
    )

答案 2 :(得分:1)

关键是在重建索引之前和之后运行“索引物理统计”报告和“按顶层表的磁盘使用情况”报告。

在“索引物理统计”报告中,您可以看到每个索引的碎片程度。

要查看这些报告...... *右键单击Sql Server Management Studio中的数据库 *将鼠标悬停在“报告”上,然后选择“标准报告”,然后选择所需的报告。

对于脚本,您可以设置识别碎片索引并重建它们(有关更多信息),请查看:

http://www.foliotek.com/devblog/sql-server-optimization-with-index-rebuilding/

答案 3 :(得分:0)

您可以尝试此过程。它将重建数据库中所有表的索引,并在结果进入Management Studio的消息窗格时打印结果:

CREATE PROCEDURE [dbo].[ReIndexDatabase]
AS
DECLARE @MyTable VARCHAR(255)
DECLARE myCursor

CURSOR FOR
SELECT table_name
FROM   information_schema.tables
WHERE  table_type = 'base table'

OPEN myCursor
FETCH NEXT
FROM myCursor INTO @MyTable

WHILE @@FETCH_STATUS = 0    BEGIN
  PRINT 'Reindexing Table:  ' + @MyTable
  EXEC('ALTER INDEX ALL ON '+@MyTable+'
  REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = OFF,
                STATISTICS_NORECOMPUTE = ON)');

  FETCH NEXT FROM myCursor INTO @MyTable
END

CLOSE myCursor
DEALLOCATE myCursor
EXEC sp_updatestats

有关重新索引link的更多信息,请参阅此link

注意页面顶部的信息。