【问题标题】:MySQL: How many queries per page is too many? [closed]MySQL:每页有多少查询太多了? [关闭]
【发布时间】:2011-01-19 12:10:18
【问题描述】:

我是 MySQL 新手,对我来说很快变得很明显的是,与创建几个数据库查询相比,每页创建多个数据库查询要容易得多......但我真的没有感觉多少查询可能太多,或者在什么时候我应该投入更多宝贵的时间来组合查询,花时间找出聪明的连接等等。

因此,我想知道这里是否有经验丰富的人使用某种“心理基准”来衡量每页的查询数量,如果有,有多少可能太多了?

我了解,任何情况下的正确答案都与满足应用程序功能要求所需的条件有关。但是,在客户要求可能灵活或设置不正确的项目中,或者在您作为开发人员可以完全控制的项目中(例如,您为自己开发的网站),您可以在功能和性能之间进行协商......基本上,如果编码要求影响性能并且您无法进一步优化它,则只删除琐碎的功能。

我将不胜感激。

谢谢

【问题讨论】:

  • 请记住,您发现的限制可能不仅仅来自查询的数量,而是来自查询的效率——确保您在正确的列上有索引,等等。跨度>
  • @Reensis,绝对的。但是,无论这些查询是否真正得到了很好的优化,或者它们是否是开发人员利用他/她目前的技能所能达到的最好水平,问题仍然存在。
  • @Reensis 是对的,您可以在您的页面上进行大量亚秒查询,但没有任何效果。我还看到单个 sql 语句在大型 TB 数据库上运行 40 小时,显然这是不可接受的。

标签: mysql performance


【解决方案1】:

没有固定的数字,“页面”是任意的——一个可以做一个数据库任务,而另一个可以有 2 打小部件,每个小部件都有自己的任务。

但有一个很好的经验法则:当您将 SELECT 放入正在处理另一个 SELECT 行的循环中时,停止。它在早期可能看起来足够快,但数据往往会增长,并且那些嵌套循环将随之呈指数增长,因此预计它会在某个时候成为瓶颈。即使单个查询最终显着变慢,从长远来看你会更好(并且总是有存储的过程、查询缓存等)。

【讨论】:

  • 这是一个好点...确保查询的数量是 O(1) 而不是 O(n) :)跨度>
  • 循环查询...听起来确实很糟糕。
【解决方案2】:

这取决于页面的使用频率、应用服务器和数据库服务器之间的延迟以及许多其他因素。

对于只显示数据的页面,我的直觉是 100 太多了。但是,在某些情况下这是可以接受的。

实际上,您应该只在必要时进行优化,这意味着您优化人们最常使用的页面,而忽略次要的页面。

特别是,这些页面不向公众开放,并且(少数)授权用户几乎不使用它们,因此没有动力让它们更快。

如果您认为真正的性能问题来自于查询过多,请启用通用查询日志(恐怕这可能会使性能变差)并分析最常见的查询以消除它们。

您可能会发现有一些“唾手可得的成果”——在最流行的页面上调用很少变化的数据的简单查询,您可以轻松消除这些查询(例如,让您的应用服务器获取 cron 作业中的数据到本地文件并从那里读取)。甚至是完全没有必要的查询之类的“下垂的果实”。

尝试组合多个查询的困难在于它往往不利于代码重用和代码可维护性,因此只有在绝对必要时才应该这样做;听起来您还没有足够的数据来做出决定。

【讨论】:

  • @MarkR,谢谢。关于代码可重用性/维护的好点。组合不直接相关的查询确实会使事情变得更复杂。
猜你喜欢
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多