在SQL Server中,我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?  答案是我们无法准确的找到索引的创建时间、最后一次索引重组时间,最后一次索引重建的时间。 其实就目前SQL Server的各个版本而言,还没有一个系统表或DMV视图有保存索引创建的时间,索引重建的时间、索引重组的时间。但是有些方法可以间接得到最后一次索引重建的时间,但是这个值有时候往往不是准确的(有时候是准确的,有时候是不准确的)。

 

在sys.sysindexes 中没有记录索引的创建、修改时间。而在sys.objects中,有create_date和modify_date两个字段,但是sys.objects不会记录所有索引的相关信息。所以modify_date的值不能作为用来判断索引重建、索引重组的时间。这两个字段的具体意义如下:

 

create_date datetime    对象的创建日期。

modify_date datetime    上次使用 ALTER 语句修改对象的日期。 如果对象为表或视图,则创建或修改表或视图的聚集索引时,modify_date 也会随之更改。

 

其实,我们往往可以根据STATS_DATE函数来获取索引的最后一次重建时间(不准确),STATS_DATE:返回表或索引视图上统计信息的最新更新的日期。如下测试所示:

 

 

SELECT * INTO TEST FROM sys.objects

 

 

CREATE INDEX PK_TEST ON TEST(object_id);

 

SQL Server中是否可以准确获取最后一次索引重建的时间?

 

CREATE INDEX IX_TEST_N1 ON TEST(name);

 

 

SQL Server中是否可以准确获取最后一次索引重建的时间?

 

如上所示,STATS_DATE获取索引的统计信息更新时间,似乎可以作为索引创建的时间。但是我后面就有例子,反证这个是不准确(不靠谱)的。接下来,我们看看,使用STATS_DATE来获取索引重建的时间。如下所示:

 

ALTER INDEX IX_TEST_N1 ON TEST REBUILD;
 
 
 
SELECT  name AS Stats ,
        STATS_DATE(object_id, stats_id) AS LastStatsUpdate
FROM    sys.stats
WHERE   object_id = OBJECT_ID('dbo.TEST')
        AND LEFT(name, 4) != '_WA_';
  
GO

相关文章:

  • 2021-06-26
  • 2022-02-08
  • 2022-12-23
  • 2021-07-01
  • 2021-08-04
  • 2022-12-23
猜你喜欢
  • 2021-12-18
  • 2022-01-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案