【问题标题】:How to reduce 'number of executions' in MS SQL Execution Plan如何减少 MS SQL 执行计划中的“执行次数”
【发布时间】:2010-02-02 10:11:42
【问题描述】:

有谁知道如何减少您在 MS SQL Server 中 SQL 查询的执行计划中看到的“执行次数”?

我们有一个查询在一台生产服务器上运行缓慢(其他都很好)。在检查执行计划时,我们看到第一步是聚集索引扫描。在运行良好的服务器上,此扫描执行一次。运行慢的,执行4次。

我们在此处 (http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p2.aspx) 读到您应该尝试减少它,但我们找不到有关如何做到这一点的任何提示。

两台服务器运行相同版本的 Windows (2003) 和 SQL Server (2000)。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server sql-execution-plan


    【解决方案1】:

    db 架构真的一样吗?如果是这样,请尝试更新统计信息并对索引和表进行碎片整理。

    http://msdn.microsoft.com/en-us/library/aa260645(SQL.80).aspx

    http://technet.microsoft.com/en-us/library/cc966523.aspx

    【讨论】:

      【解决方案2】:

      对不起,我自己回答这个问题。感谢亚瑟的链接,它们很有用(所以我对你的答案投了赞成票)。我们更新了统计数据,但没有帮助。我们使用 DBCC SHOWCONTIG 检查了碎片整理,但它与其他数据库并没有太大区别。

      很抱歉没有发布查询 AdaTheDev,但我必须更改所有列和内容(因为这是相当关键的业务内容),我们现在找到了解决方案。

      我们注意到该表的记录比其他数据库多得多。我们在正确的列上添加了索引。我们做了一个像这样的连接:

      inner join table2 t2 on t1.t1Id = t2.t1Id and t2.someOtherId = @parameter
      where t2.aThirdId = @otherParameter
      

      因此,我们为每个 Id 列添加了三个单独的索引,这将其从 30 秒加快到 3-5 秒(尽管我们确实在 t1Id 和 someOtherId 上都有一个索引)。

      最后我们也对表进行了清理,因为很多记录在逻辑上被删除了,不再需要了。但索引起到了作用。

      【讨论】:

        猜你喜欢
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        相关资源
        最近更新 更多