如何为报表编写SQL查询(通常每周运行一次,每月运行一次或一些不频繁的数量),与为一天运行多次的Web应用程序(或应用程序)编写查询有何不同?如果查询每月只运行一次,速度和性能不是一个大问题,对吗?在更频繁地使用SQL方面(临时表,CTE等)方面呢?
答案 0 :(得分:6)
它们没有区别,并且适用于任何其他查询的相同注意事项。
速度和性能是否是一个问题不是您的决定,而是报告用户的决定。
如果您的月度报告查询需要3个小时,在此过程中阻止多个表并暂停其他应用程序,因为他们无法访问这些表,会发生什么?
答案 1 :(得分:2)
报告的速度和性能往往是一个更大的问题。您的平均CRUD SQL影响通常仅影响应用程序中的1条记录,搜索可能需要更多但通常结果限制为设定的行数。
报告可能需要汇总来自数百万条记录和20-30条联接的数据。如果编写不当,可能会大大减慢系统速度,当然,当用户需要等待10个小时才能获得他们要求的报告时,用户会变得非常暴躁。它也可能导致阻塞。然后你有脏读的问题,这可能会导致报告中出现更多问题。数据经常被存储用于报告是有原因的,这通常是为了提高性能并使报告不会干扰执行交易工作的用户。
编写报表查询通常要复杂得多,而且性能调整比较复杂(由于复杂性),而不是几乎任何SQL攻击不生成某种形式报表的Web应用程序。我看过超过500行的报告查询。