我应该在页面上限制自己的MySQL查询数量? PHP / MySQL

时间:2009-02-18 16:45:16

标签: php mysql performance

好的,所以我相信很多人已经构建了疯狂的数据库密集型页面......

我正在构建一个页面,我想从中提取各种不相关的数据库信息。以下是此页面的一些示例不同查询:

  • 文章内容和信息
  • 如果作者是注册用户,他们的信息
  • 更新文章的视图计数器
  • 检索文章的评论
  • 检索评论作者的信息
  • 如果文章的读者已登录,请查询其中的信息
  • 等...

我知道这些基本上会非常闪电,而且我可以结合一些;但我想确保这不是异常吗?

您会在页面上限制多少相当正常且不重的查询?

10 个答案:

答案 0 :(得分:29)

尽可能多,但不多。

真的:不要担心优化(现在)。首先构建它,然后测量性能, IFF 某处存在性能问题,然后从优化开始。

否则,您可能会花费大量时间来优化不需要优化的事情。

答案 1 :(得分:8)

我的网页上有50个查询,没有问题。对非大型(即,适合主存储器)表的快速查询可以在1毫秒或更短的时间内发生,因此您可以执行其中的一些。

如果页面加载时间不到200毫秒,您将拥有一个活泼的网站。服务器和浏览器之间的延迟使用了很大一部分,所以我喜欢瞄准<在服务器上花费的时间为100毫秒。在该时间段内执行任意数量的查询。

最大的瓶颈可能是您必须花费在项目上的时间,因此首先要优化它:)如果必须,稍后优化代码。话虽这么说,如果您要编写与此问题相关的任何代码,请编写一些内容,以明确您的查询需要多长时间。这样你至少可以发现你有问题。

答案 2 :(得分:5)

我认为没有任何一个正确答案。我会说只要查询速度很快,页面遵循逻辑流程,就不应该对它们施加任意限制。我看过有十几个查询的页面,我看到它们只用一个查询。

答案 3 :(得分:5)

每个查询都需要往返数据库服务器,因此许多查询的成本随着延迟而变得越来越大。

如果它在同一主机上运行,​​那么仍然会有轻微的速度损失,不仅因为套接字在您的应用程序之间,而且因为服务器必须解析您的查询,构建响应,检查访问权限以及您的其他任何开销得到了SQL服务器。

因此,一般情况下,查询较少会更好。

尽管如此,你应该尝试在SQL中尽可能地做:当你可以在SQL本身没有麻烦的情况下实现相同的算法时,不要在客户端语言中获得某些算法的输入。这不仅可以减少查询次数,还可以帮助您选择所需的行。

Piskvor的回答在任何情况下都适用。

答案 4 :(得分:2)

例如,Wordpress可以在一页上最多提取30个查询。有几件事你可以用来阻止MySQL下拉 - 其中一个是memchache - 但是现在,正如你所说,如果它是直截了当的,只要确保你所提取的所有数据都在MySQL中正确编入索引并且不用担心很多关于查询的数量。

如果您正在使用框架(例如CodeIgniter),您通常可以为页面创建时间提取数据,并检查是否会导致网站停机。

答案 5 :(得分:2)

正如其他人所说,没有一个号码。请尽可能使用SQL来构建它,并一起检索数据集。

通常表明你可能做错了什么是在循环中有一个SQL。

尽可能使用联接来检索属于一起的数据而不是发送多个语句。

始终尝试确保您的语句准确检​​索您所需的内容,而不需要额外的字段/行。

答案 6 :(得分:1)

如果您需要查询,则应该使用它们。

我总是试图在同一个地方同时执行它们,这样就不需要页面的不同部分(如果它们是分开的......)来建立数据库连接。我认为将所有内容存储在变量中比将页面的每个部分连接到数据库更有效。

答案 7 :(得分:1)

根据我的经验,最好进行两次查询并对结果进行后期处理,而不是制作一个运行时间长十倍而不需要进行后期处理的查询。也就是说,如果你已经有了结果,最好不重复查询,并且有很多不同的方法可以实现。

但所有这些都是围绕性能优化的。所以,除非你真的知道你在做什么(暗示:在这种情况下大多数人没有),只需为你需要的数据进行查询,然后再重构。

答案 8 :(得分:1)

我认为你应该尽可能少地限制自己。尝试将查询与mutlitask相结合并节省时间。

答案 9 :(得分:0)

过早优化是一个像人们之前提到过的问题,但是这就是你在使用代码以使其“快速”运行的地方。但是人们把这个“格言”推得太远了。

如果您想在设计时考虑到可伸缩性,只需确保加载数据所做的任何事情都是充分抽象的,并且调用是集中的,这将使您在需要实现共享内存缓存时更容易,因为您只需要必须在一些地方改变一些事情。