代码之家  ›  专栏  ›  技术社区  ›  Peter Alexandr Nikitin

如何减少MS SQL执行计划中的“执行次数”

  •  1
  • Peter Alexandr Nikitin  · 技术社区  · 16 年前

    我们有一个查询在一台生产服务器上运行缓慢(其他服务器也可以)。在检查执行计划时,我们看到第一个步骤之一是聚集索引扫描。在运行正常的服务器上,此扫描执行一次。对于运行缓慢的一个,执行4次。

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

    任何帮助都将不胜感激。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Arthur    16 年前

    db模式真的是一样的吗?如果是这样的话,那么尝试更新统计数据并对索引和表进行碎片整理。

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

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

        2
  •  0
  •   Tom H zenazn    16 年前

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

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

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

    因此,我们为每个Id列添加了三个单独的索引,这将它从30秒提高到了3-5秒(不过我们确实有一个关于t1Id和其他Id的索引)。

    最后,我们还对表进行了清理,因为许多记录在逻辑上被删除,不再需要。但指数起了作用。