官方没有提到 UNDO 这个操作,就像没有官方推荐从 DROP DATABASE 中恢复一样。负责任的 DBA 不会做这些事情。
如果您刚刚完成并且很高兴,您很可能将名称保留为默认值 - 这很有帮助。雷蒙德的答案几乎就在那里。但是,如果您随着时间的推移完成了它,那么您就不想撤消所有好的统计数据和索引。第二个难题是检查索引上次更新的时间。如果您在几分钟前刚刚完成,这是一个很好的 UNDO 时间范围,请检查此查询以获取刚刚重建的索引和统计信息。
SELECT object_name(object_id) tablename,
name indexname,
nullif(name,name) statsname,
STATS_DATE(object_id, index_id) lastupdated
from sys.indexes
where STATS_DATE(object_id, index_id) >= dateadd(hh,-1,getdate())
-- and name like '_dta%'
union all
SELECT object_name(object_id) tablename,
nullif(name,name) indexname,
name statsname,
STATS_DATE(object_id, stats_id) lastupdated
from sys.stats
where STATS_DATE(object_id, stats_id) >= dateadd(hh,-1,getdate())
-- and name like '_dta%'
order by lastupdated desc
这会将列表过滤到仅在过去一小时内更新的索引。但是,自动统计通常默认开启,并且偶尔会重建统计信息,因此您不希望删除 all 显示的索引。取消注释 and name like '_dta%' 将是一个开始,除非您重命名它们 - 在这种情况下,您肯定可以回忆起您命名它们的名称吗?