none
利用缺失索引视图表,自动建立索引脚本,有高手协助一下吗? RRS feed

  • 问题

  • SQL 语句

    SELECT b.name databasename,c.name objectname,a.*
    FROM sys.dm_db_missing_index_details a
    left join sys.databases b on a.database_id=b.database_id
    left join sys.objects c on a.object_id=c.object_id
    where c.name is not null
    and c.type='U'
    or c.type='V'

    请高手协助!

    2013年5月17日 2:29

答案

  • 理论上是完全可以的,

    看到过一个博客根据DMV来自动创建或者删除INDEX的script,但是比较有风险哦。



    Please click the Mark as Answer button if a post solves your problem!


    最主要的风险是创建索引时导致的 Block 吧,  如果程序做的话, 你可以写两个线程, 一个线种创建索引, 另一个索引监控 Block, 如果导致的 Block 时间比较长, 可以考虑终止它,  如果版本支持, 用联机的方式

    其实自动创建还是可行的, 主要是看你创建时所评估的信息是否合理, 这个对经验要求比较高一点, 另外, 既然是自动创建, 那么还应该考虑无效索引的自动删除(可以参考 sys.dm_db_index_usage_stats), 不然你的索引恐怕就越来越多了

    自动创建和删除索引在我的维护系统中都有做, 已经运行了不短的一段时间, 感觉还是挺有用的, 操作的过程也有监控, 还没有发现造成什么不庚子的后果

    2013年5月22日 1:05

全部回复

  • 之前想过做一个工具,索引优化器,但是也苦于LZ的问题,所以没有做成功,我知道原理就是利用sys.dm_db_missing_index_details视图

    给我写信: QQ我:点击这里给我发消息

    2013年5月17日 3:53
  • 这个视图结果只能说有参考作用,真正应该如何建索引还得DBA全面分析

    如果真的能100%自动化了,那么DBA们也该退出江湖了


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年5月17日 5:15
  • 你现在的问题是什么?


    Please Mark As Answer if it is helpful.

    2013年5月17日 6:57

  • 哈哈,不知道dgdba大侠有没有用过汪洋大侠做的这个索引优化器

    不过都是参考已而,他可以根据索引的缺失给出索引方案,并生成建立索引脚本,估计LZ就想实现这个功能


    给我写信: QQ我:点击这里给我发消息

    2013年5月17日 7:31

  • 哈哈,不知道dgdba大侠有没有用过汪洋大侠做的这个索引优化器

    不过都是参考已而,他可以根据索引的缺失给出索引方案,并生成建立索引脚本,估计LZ就想实现这个功能


    给我写信: QQ我:点击这里给我发消息


    其实生成建立索引的脚本很简单,但是还是要DBA判断一下哪些要建哪些不要,而不能完全按照系统给出的建立索引。

    Please Mark As Answer if it is helpful.


    2013年5月17日 8:03
  • 这个当然是给DBA的一个参考啦


    给我写信: QQ我:点击这里给我发消息


    2013年5月17日 8:07
  • Sql comes with database tuning wizard for that.
    2013年5月17日 12:49
  • 有数据库引擎优化顾问,不过好像大家都跑题了~


    给我写信: QQ我:点击这里给我发消息

    2013年5月17日 15:04
  • 真正玩DB的人,估计根本就没想过要去用什么“人参”工具

    应该说自己都有适合的脚本及套路去分析、诊断、解决问题

    写这样的工具,略熟悉RAD,就可动手


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年5月18日 5:18
  • 工具还是有用的。为广大dba,尤其是非专职dba服务。

    想不想时已是想,不如不想都不想。

    2013年5月20日 10:38
    版主
  • 一般会再参考 sys.dm_db_missing_index_group_stats 中对缺少索引的统计信息判断这个缺失索引创建的效果

    2013年5月21日 1:20
  • 理论上是完全可以的,

    看到过一个博客根据DMV来自动创建或者删除INDEX的script,但是比较有风险哦。



    Please click the Mark as Answer button if a post solves your problem!


    2013年5月21日 9:08
  • 理论上是完全可以的,

    看到过一个博客根据DMV来自动创建或者删除INDEX的script,但是比较有风险哦。



    Please click the Mark as Answer button if a post solves your problem!


    其实只是给出参考,使这些维护DB工作自动化,最后要不要添加索引还是DBA来决定的,不过有工具算是进步了~

    听讲汪洋大侠写的这个索引优化器还是国内第一个出的


    给我写信: QQ我:点击这里给我发消息




    2013年5月21日 9:15
  • 理论上是完全可以的,

    看到过一个博客根据DMV来自动创建或者删除INDEX的script,但是比较有风险哦。



    Please click the Mark as Answer button if a post solves your problem!


    最主要的风险是创建索引时导致的 Block 吧,  如果程序做的话, 你可以写两个线程, 一个线种创建索引, 另一个索引监控 Block, 如果导致的 Block 时间比较长, 可以考虑终止它,  如果版本支持, 用联机的方式

    其实自动创建还是可行的, 主要是看你创建时所评估的信息是否合理, 这个对经验要求比较高一点, 另外, 既然是自动创建, 那么还应该考虑无效索引的自动删除(可以参考 sys.dm_db_index_usage_stats), 不然你的索引恐怕就越来越多了

    自动创建和删除索引在我的维护系统中都有做, 已经运行了不短的一段时间, 感觉还是挺有用的, 操作的过程也有监控, 还没有发现造成什么不庚子的后果

    2013年5月22日 1:05
  • 用这三个DMV可以拼出相关的SQL语句:

     sys.dm_db_missing_index_group_stats 
     sys.dm_db_missing_index_groups 
     sys.dm_db_missing_index_details 

    2013年5月22日 10:21
  • Keep in mind that over indexing is no better than missing index, even worse sometime.
    2013年5月22日 12:55
  • 邹建大侠分析得很详细


    给我写信: QQ我:点击这里给我发消息

    2013年5月22日 15:51