[英]How many SQL queries per HTTP request is optimal?
我知道这个问题的答案大部分是“它取决于”,但是我想知道是否有人有一些指示。
我们在ASP.NET MVC中执行每个请求的查询。 我们需要获取用户权限信息的每个请求,以及我们正在显示的视图的各种数据。 有多少是太多,我知道我应该意识到我正在执行的查询数量。 我会假设如果他们是小问题并进行优化,那么半打应该没问题? 我对吗?
你怎么看?
过早优化是万恶之源:)
首先创建您的应用程序,如果它是缓慢的,您将必须确定原因并优化该部分。 确保减少查询将节省您的时间,但也优化您必须执行的查询。
您可以花一整天的时间来减少50%的时间花在查询上,开始时只花费2毫秒,或花费2个小时来删除一些内部INNER JOINS
,这使得另一个查询需要花费10秒钟。 在开始优化之前分析什么是错误的。
最佳数量为零。
鉴于这很可能无法实现,唯一合理的说法是:“尽可能少”。
简化您的网站设计,直到它尽可能简单,并仍然满足您的客户的要求。
缓存可以缓存的信息。
在可能的情况下,将信息预加载到请求外的缓存中。
仅询问该请求中所需的信息。
如果您需要为单个请求进行大量独立查询,请尽可能并行加载。
您剩下的就是该网站的“最佳”金额。 如果这太慢,您需要再次检查以上内容。
用户权限信息可以被缓存,您可以在任何地方显示其他常见信息。
您可以通过超出要求的缓存来逃避。 例如 - 您可以缓存“实时”信息,例如产品库存水平和用户的购物车。 使用SQL更改通知允许您在后台过期和重新填充缓存。
尽量少。
使用缓存进行查找。 还在会话中存储一些轻量级数据(例如权限)。
您可以根据需要制作任意数量的查询,直到您的网站速度过慢。
问:您是否遇到与数据库查询相关的性能问题?
是? 答:比现在少。
没有? 答:你现在的号码完全相同。
如果没有损坏,请不要修理它。
虽然重构和优化以节省几毫秒是程序员花时间的一种有趣且智力上有益的方式,但这通常是浪费时间。
此外,更改代码以组合数据库请求可能会以代码中的简单性和可维护性为代价。 也就是说,虽然技术上可以将多个查询合并为一个,但这可能需要删除代码中业务对象的概念隔离,这很糟糕。
尽可能多,但不多。
换句话说,性能瓶颈不是来自查询的数量 ,但你在查询做什么以及如何处理数据(例如缓存一个巨大的尚未静态结果集可能会帮助)。
除了减少旅行次数的所有其他建议外,还取决于每次往返时检索的数据量。 如果它只是几个字节,那么它可能很健谈,性能也不会受到影响。 但是,如果每次旅行返回数百kb,那么你的表现会受到更快的伤害。
你已回答了自己的问题“ 这取决于你 ”。
尽管如此,试图证明每个HTTP请求的最佳查询数量是不可能的。 如果您的SQL服务器具有真正良好的硬件支持,那么您可以在更短的时间内运行大量查询,并且HTTP请求的转换时间非常短。 所以基本上,正如你正确地说的那样,“它取决于”。
如上面的评论所示,某些缓存可能适合您的情况。 就像你的问题所暗示的那样,真正的答案是“它取决于”。 通常,查询越少,因为每个查询都有与之关联的成本,因此查询越多越好。 您应该检查数据模型和应用程序的要求,以确定哪些是合适的。
例如,如果用户的权限在用户会话期间可能是静态的,则缓存权限数据是有意义的,因此需要的查询更少。 如果View中显示的数据的某些方面对于用户的会话也是静态的,则也可以缓存这些方面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.