首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于查找操作Server数据库的不必要索引的方法?

用于查找操作Server数据库的不必要索引的方法?
EN

Server Fault用户
提问于 2009-06-04 13:45:51
回答 6查看 2.9K关注 0票数 5

除了浪费数据库上的空间外,SQL Server上不必要的索引还可以减缓插入和更新操作的速度。缺乏数据库原则经验的开发人员有时倾向于创建对运行中的查询没有意义的表索引。

对于Server 2005/2008是否有一个通用的过程或工具来分析数据库工作负载,并提示在某个操作数据库上没有使用或不需要哪些索引?

谢谢!

EN

回答 6

Server Fault用户

回答已采纳

发布于 2009-06-04 13:59:42

我在这里看到一个可爱的that脚本(http://blog.sqlauthority.com/2008/02/11/sql-server-2005-find-unused-indexes-of-current-database/)来显示应该在Server 2005上运行的未使用的索引。这里还有一个http://aspadvice.com/blogs/ssmith/archive/2008/03/31/Find-Unused-SQL-2005-Indexes-for-Current-DB.aspx

看起来,dm_db_index_usage_stats是所有这一切的关键。挺干净的!(请参阅http://msdn.microsoft.com/en-us/library/ms188755.aspx,我要去看看我现在创建的一些生产数据库,看看这些数据是什么样子的。(微笑)

编辑:一些非常好的加载项背景:http://blogs.msdn.com/craigfr/archive/2008/10/30/what-is-the-difference-between-sys-dm-db-index-usage-stats-and-sys-dm-db-index-operational-stats.aspx

票数 5
EN

Server Fault用户

发布于 2009-06-04 15:09:33

在使用sys.dm_db_index_usage_stats时要记住以下几点:

  1. 输出仅包含自上次数据库启动以来使用的索引。当数据库关闭时,将删除该数据库的内存中信息缓存中的所有条目。类似地,缓存无法在立即重新启动时存活下来。如果不重新启动数据库,就无法手动清除特定数据库的条目。在第一个答案中引用的各种文章(以及我的博客)描述了如何在不同的时间捕获输出来进行时间序列分析。
  2. 一定要测试你的整个商业周期。你不想删除一个用于月底报告或CEO查询的索引,尽管它可能很诱人。
  3. 在决定使用索引是否有利可图之前,确保您理解了各种计数以及它们的含义,或者仅仅是以牺牲来维护索引。

希望这能有所帮助。

PS还有一件事是其他人读到的,想知道SQL Server 2000是否有类似的方法--不,我们(因为我当时是团队成员)只增加了2005年的功能。

票数 5
EN

Server Fault用户

发布于 2009-06-04 14:20:00

我们在SQLServerPedia上有一篇带有脚本的wiki文章,还有一个关于如何使用它的教程视频:

查找没有使用的索引:

http://sqlserverpedia.com/wiki/Find_索引_不_在……里面_使用

另一个要查找您应该添加的索引:

http://sqlserverpedia.com/wiki/Find_缺少_索引

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/19672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档