1

在过去 15 天内,我在 SQL Server 2008 R2 中的几个表上创建了一些新索引。

知道表名,是否可以确定最近 15 天内创建了哪些索引?

4

2 回答 2

3

不是向后兼容性视图的忠实拥护者,例如sysindexes因为您将无法永远依赖它们,并且因为其他答案中提出的联接过滤了的创建日期,而不是索引。对于普通索引,SQL Server 根本不会记录创建索引的日期/时间(尽管您可以通过约束获得它)。

如果尚未推出 15 天,您可以在默认跟踪中找到此信息(以及创建索引的人,即使有约束也无法从元数据中获取):

USE your_database;
GO

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT 
  HostName, LoginName, ApplicationName, StartTime, [Index] = ObjectName, IndexId
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 46
AND EventSubClass = 1
AND DatabaseName = DB_NAME()
AND ObjectID = OBJECT_ID('dbo.your_table_name')
AND IndexID IS NOT NULL
AND StartTime >= CONVERT(DATE, DATEADD(DAY, -15, GETDATE()))
ORDER BY EndTime DESC;

展望未来,您可以使用 DDL 触发器主动记录此信息,因此您不必争先恐后地依赖默认跟踪的年龄来审核这些活动......

于 2013-09-04T19:09:09.123 回答
0

尝试这个。

select crdate, i.name, object_name(o.id)
from sysindexes i
join sysobjects o ON o.id = i.id
where crdate >= getdate()-15
于 2013-09-04T18:57:19.530 回答