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