当索引被禁用时

When an index got disabled

提问人:Mr. K 提问时间:2/19/2016 更新时间:2/19/2016 访问量:534

问:

我最近遇到了一些性能问题,并且在故障排除索引时在几个表上被禁用。但我没有得到这些何时被禁用的细节。 我已经检查了“sys.indexes”表,但没有可用的此类信息。

sql-server 索引

评论

0赞 Sanu Antony 2/19/2016
检查 sys.indexes 中的is_disabled
0赞 Ivan Starostin 2/19/2016
我建议开始跟踪数据库上的所有 DDL 命令。因此,您将拥有日期、名称等。

答:

-1赞 Sanu Antony 2/19/2016 #1

我希望这对你有所帮助;

SELECT OBJECT_NAME(si.object_id) AS table_name, i.name AS indexname, sc.name column_name
FROM sys.index_columns si
     JOIN sys.columns sc ON sc.object_id = si.object_id
                            AND si.column_id = sc.column_id
     LEFT JOIN SYS.indexes i ON si.object_id = i.object_id
WHERE i.is_unique = 1;

评论

1赞 Mr. K 2/19/2016
我要求“当索引被禁用时”。
-1赞 Aditya 2/19/2016 #2

它在堆栈溢出时......查找禁用的索引...

若要禁用或重新生成索引,可以使用 SQL Server 博客中的以下代码

USE AdventureWorks
 GO
----Diable Index
ALTER INDEX [IX_StoreContact_ContactTypeID] ON Sales.StoreContact DISABLE
 GO
----Enable Index
ALTER INDEX [IX_StoreContact_ContactTypeID] ON Sales.StoreContact REBUILD
 GO

评论

0赞 Mr. K 2/19/2016
我知道该怎么做。我的问题与此无关。我问的是“当索引禁用时”而不是“如何禁用”。
0赞 Aditya 2/22/2016
@RohitKumar,我相信不可能找到索引禁用的日期和时间详细信息。正如 Ben Thul 所建议的那样,在这种情况下,设置 Trigger 或 Event 应该有效。
2赞 Ben Thul 2/19/2016 #3

我认为答案是“不,事后看来是没有的”。但是,如果您有兴趣了解这种信息,以便下次发生时了解,我会在 DDL 事件上设置 DDL 触发器或事件通知,以将该信息存储在某个地方。