【问题标题】:Performance of where statement in SQL as opposed to filter on datasetSQL 中 where 语句的性能,而不是数据集上的过滤器
【发布时间】:2012-06-11 16:06:11
【问题描述】:

如果我搜索不够彻底,请鞭打我.....

我想知道什么对性能更好:

使用 SQL 收集、聚合和排序我的数据(数据集中的 WHERE、Group by、Order By 语句) 或者 只需收集“裸”数据并在报告中进行分组、排序和过滤。 (在报告中过滤数据集、参数和聚合)

使用存储过程对性能有好处吗?

您好,

亨利

【问题讨论】:

    标签: sql-server-2008 ssrs-2008 reporting-services


    【解决方案1】:

    嗯,SSRS 是一个显示结果的工具,它经过优化可以做到这一点,虽然它可以执行聚合和过滤器以及更多的事情,但这并不意味着它是他的主要目标,所以它没有优化到去做。当您对数据集执行聚合、过滤和数据操作时,您正在为此使用数据库引擎,它为此进行了优化,因此您很可能通过这种方式获得更好的性能。至于存储过程或纯 SQL,两者都没有内在的性能优势(我更喜欢纯 SQL,只是因为它给了我更多的灵活性)。

    【讨论】:

    • 当我需要数据集来填充示例参数时,我会 1. 创建一个链接到该共享数据集的新数据集,但 2. 删除不合适的字段。这样,我可以确保所有报告都使用相同的数据集,但在创建具有不同分组的报告时会提供很大的灵活性。不幸的是,经验告诉我们,如果我们使用经过分组、排序和过滤的嵌入式数据集,并且需要进行更改,我们必须检查所有数据集并确保更改无处不在。除了繁琐之外,它还非常容易出错。
    • 但我从您的回答中了解到,这会对性能产生影响。当您需要针对同一组数据的不同报告时,您会怎么做?
    • @Henrov - 您询问了每种方法的性能。现在,和往常一样,如果你想获得灵活性,你必须付出其他代价,在这种情况下是性能。最好的性能将不太灵活,而最灵活的则会对性能产生影响。至于我会选择哪一个,这取决于报告是否需要非常快,仅此而已。
    【解决方案2】:

    在性能方面,SQL Server 针对这类事情进行了优化;

    在某些情况下,存储过程可以显着提高性能,因为它预编译查询计划...在这种情况下,除非经常调用报告,否则我不知道您是否会注意到差异。不过,我更愿意将我的 SQL 保留在报告之外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-08
      • 2016-07-02
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多