在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);

CREATE INDEX IX_TEST_N1 ON TEST(name);

如上所示,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

但是更新索引的统计信息也会引起对应的STATS_DATE的时间变化,此时这个时间就不是索引的最后一次重建时间(Index Rebuild)了。所以使用索引对应统计信息的最后一次更新时间作为最后一次索引重建的时间,有时候往往不准确。这个只能作为参考,而不能作为依据。

UPDATE STATISTICS TEST  PK_TEST  WITH FULLSCAN ;

另外,索引重组(INDEX REORGANIZE)不会引起索引对应统计信息的更新,所以这个STATS_DATE系统函数不能作为索引重组的时间依据。

ALTER INDEX IX_TEST_N1 ON TEST REORGANIZE;

最后,我们来看一个例子。如下所示,创建一个空表,我们可以看到,没有生成相关索引的统计信息。这种场景下,STATS_DATE函数返回的值为NULL,此时可以看到STATS_DATE 并不能作为索引创建的时间。或者换个说法,这个案例就是一个活生生的反例。

DROP TABLE TEST;

 

 

CREATE TABLE TEST

    (

      ID INT ,

      NAME VARCHAR(12) ,

      SEX BIT DEFAULT 0 ,

      CONSTRAINT  PK_TEST  PRIMARY KEY(ID)

    );

 

SELECT GETDATE();

 

 

 

CREATE INDEX IX_TEST_N1 ON TEST(NAME, SEX);

 

参考资料:

 

https://dba.stackexchange.com/questions/82943/find-out-when-your-index-was-last-rebuilt-reorganized

https://social.technet.microsoft.com/wiki/contents/articles/18767.sql-server-how-to-check-when-index-was-last-rebuilt.aspx

SQL Server中是否可以准确获取最后一次索引重建的时间?的更多相关文章

  1. SQL Server中如何识别、查找未使用的索引(unused indexes)

    在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根 ...

  2. SQL Server中的高可用性(2)----文件与文件组

        在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...

  3. 理解SQL Server中索引的概念

    T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他   简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能 ...

  4. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  5. 理解SQL Server中索引的概念,原理

    转自:http://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html 简介 在SQL Server中,索引是一种增强式的存在,这意味着, ...

  6. T-SQL查询进阶--理解SQL Server中索引的概念,原理

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,sql server仍然可以实现应有的功能,但索引可以在大多数情况下提升查询性能,在OLAP(On line Trans ...

  7. 理解SQL Server中索引的概念,原理以及其他(转载)

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  8. 在SQL SERVER中获取表中的第二条数据

    在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...

  9. (4.17)sql server中的uuid获取与使用

    sql server中的uuid  建表: 1.自增长 studentno int primary key identity(1,1)——bigint也是可以的 2.创建uuidcustomerid  ...

随机推荐

  1. dva/docs/GettingStarted.md

    进入目录安装依赖: npm i 或者 yarn install开发: npm run dev npm install 太慢,试试yarn吧.建议用npm install yarn -g进行安装. Co ...

  2. SpringMvc 这篇文章写得不错 多多学习2017.6.29

    http://www.cnblogs.com/bigdataZJ/p/springmvc1.html  博客园链接

  3. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  4. 关于JQuery的技巧、易错点(连载中.....)

    JQuery的诞生让我们对原生态的js代码变得陌生起来,不得不说,他真的是很强大,接下来博主就浅谈一下我对JQuery的一些认知和小tips. JQuery:他是一个JavaScript库,他将原生态 ...

  5. Ubuntu16.04下安装Chrome出现“未安装软件包 libappindicator1”问题的解决办法

    1. 强制安装chrome sudo dpkg -i google-chrome-stable_current_i386.deb --force 2. 补齐依赖 sudo apt-get instal ...

  6. 图片和base64相互转化

    # -*- coding: utf-8 -*- import urllib2 as ulb import base64 #用urllib2库链接网络图像 response=ulb.Request('h ...

  7. golang接口三个特性

    类型和接口 因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍.go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编译阶段中有明确的变量类型,比如像:int.float32.MyTy ...

  8. js的赋值问题:值传递还是引用传递?

    ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型--Object,Object本质上是由一 ...

  9. python中os.path.dirname(__file__) 命令行 参数没有绝对路径导致数据库找不到

    (1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:/python ...

  10. J2EE相关概念,EJB/JNDI/JMS/RMI等

    J2EE 四层模型 J2EE的核心API.组件.相关概念 JDBC(Java Database Connectivity) JNDI(Java Name and Directory Interface ...