代码之家  ›  专栏  ›  技术社区  ›  Saif Khan

撤消SQL Server数据库优化所做的更改

  •  3
  • Saif Khan  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  5
  •   Raymund    13 年前

    有一种方法,只要您没有重命名它们,通常数据库调优顾问生成的对象都以 _dta

    enter image description here

    因此,您可以通过运行此查询查看它们

    SELECT        
    *
    FROM            
    sys.indexes where name like '_dta%'
    

    SELECT
    *
    FROM 
    sys.stats where name like '_dta%'
    

    从那里我想你会知道该扔什么东西

        2
  •  2
  •   RichardTheKiwi    13 年前

    没有 引用以撤消此操作,就像不会有 建议从DROP数据库中恢复。一个负责任的DBA不会做这些事情。

    如果您刚刚完成了,并且对触发感到高兴,那么您很可能会将名称保留为默认名称,这会有很大帮助。雷蒙德的答案几乎是正确的。但是如果你已经做了一段时间,那么你就不会想要撤销所有好的统计数据和索引。第二个难题是检查索引上次更新的时间。如果您在几分钟前刚刚完成了此操作(这是一个很好的时间段),请检查此查询以获取刚刚重建的索引和统计信息。

      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
    

    这会将列表向下过滤,仅过滤已删除的索引 更新 在最后一个小时。然而,“自动统计”在默认情况下通常处于启用状态,并且偶尔也会重建统计信息,所以您不想删除 显示的索引。取消注释 and name like '_dta%'

        3
  •  1
  •   Aaron Kempf    13 年前

    我经常使用psuedo动态SQL来生成所需的SQL语句。 这将删除以前缀_dta开头的所有索引。


    从…起
    系统索引

    将结果粘贴到一个新窗口中,然后我会在删除之前手动检查每个索引。

    同样,您也可以对删除统计信息执行相同的操作

    挑选

    其中的名称像“\u dta%”

    推荐文章