【问题标题】:Determine if an Index has been used as a hint确定索引是否已用作提示
【发布时间】:2010-05-26 22:00:07
【问题描述】:

在 SQL Server 中,可以选择使用查询提示。 例如

SELECT c.ContactID
FROM Person.Contact c
WITH (INDEX(AK_Contact_rowguid))

我正在摆脱未使用的索引,并且想知道如何确定索引是否用作查询提示。有人对我如何做到这一点有建议吗?

干杯, 乔

【问题讨论】:

  • 您是在询问索引是否曾经在提示中使用过(包括即席 SQL 语句),还是仅在视图/proc 中使用过?
  • 我想知道索引是否在视图/进程中使用。我担心的是,如果删除用作视图/proc 中的提示的索引,则视图/proc 在被 DB 应用程序调用时会失败,这最终意味着最终用户会遇到一些意外错误。

标签: sql-server-2008 indexing query-hints


【解决方案1】:

您只能为客户端 SQL 运行分析器或搜索 sys.sql_modules 否则。

要查找未使用的索引,您通常使用something based on dmvs。这将向您显示正在使用和需要保留的索引。

【讨论】:

    【解决方案2】:

    这是一个很好的问题,我想我不能给你一个简单的答案。如果是我,我会在 Management Studio 中编写整个数据库的脚本,并对索引名称进行文本搜索。我也会在我所有的报告和源代码中这样做,以确保也是如此。

    我认为提示不会进入 sys.dependencies 用于 procs 和函数,但即使他们这样做了,您也可能需要处理一些临时 SQL,所以这就是我使用文本搜索路径。

    【讨论】:

    • 我将如何编写整个数据库的脚本? SSMS 中有一个选项可以为 DB 编写脚本,但这只会为 DB 而不是 DB 对象创建脚本。
    • 我已经搁置了这个项目,但是对于任何对此感兴趣的人来说,这里有一个用于编写 SQL Server 2008 DB 脚本的链接。 kodyaz.com/articles/…我还没有尝试过,但看起来它可以完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2015-11-11
    相关资源
    最近更新 更多