SQL Server 2008:如何衡量创建/重建索引所花费的时间?

时间:2018-07-11 13:45:13

标签: sql-server

我正在相当大的表上重建SQL Server 2008上的非聚集索引

这是代码

CREATE UNIQUE NONCLUSTERED INDEX [idx_Documents_Title] ON [dbo].[Documents]
(
    -- 3 columns
)
WHERE [deleted]=(0) AND [processing]=(0)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

问题..如何测量重建索引所需的时间?我是.NET开发人员,通常使用StopWatch类来测量时间/性能。我可以应用类似的技术来衡量重建时间吗?可能不是因为它看起来索引的重建/创建是异步的。

3 个答案:

答案 0 :(得分:1)

ALTER INDEX ... REBUILD将同步执行。

DECLARE @StartTime DATETIME = SYSDATETIME()

ALTER INDEX [idx_Documents_Title] ON [dbo].[Documents] REBUILD

DECLARE @EndTime DATETIME = SYSDATETIME()

SELECT 
    StartTime = @StartTime, 
    EndTime = @EndTime,
    DifferenceInMinutes = DATEDIFF(MINUTE, @StartTime, @EndTime)

答案 1 :(得分:1)

DECLARE @START_TIME DATETIME
SET @START_TIME = GETDATE()

--your index creation code or whatever you'd like to measure

SELECT DATEDIFF(SECOND, @START_TIME, GETDATE()) AS TOTAL_SECONDS

您可以用@START_TIME包装代码,然后找到DATEDIFF,可能会发现0秒的运行速度如此之快。

我敢肯定有一些聪明的方法可以做到这一点,但这是一般的想法。

答案 2 :(得分:0)

@Jeroen Mostert帮了我大忙。执行SET STATISTICS TIME ONSET STATISTICS TIME ON给了我所需的统计信息。