【问题标题】:How many queries in one webpage?一个网页中有多少个查询?
【发布时间】:2011-03-28 04:39:22
【问题描述】:

一个网页中有多少查询是好的性能?如果该页面是被多次查看的主页。

然后怎么样....

$sql1 = mysql_query("SELECT * FROM a", $db1);
while($row = mysql_fetch_assoc($sql1)){
  $sql2 = mysql_query("SELECT * FROM b WHERE aid='a'", $db2);
  $a = mysql_fetch_assoc($sql2);
}

好吃吗?实际上我可以通过 INNER JOIN 将 $sql1 和 $sql2 组合在一起,但问题是 $sql1 是来自数据库 1 的查询数据,而 $sql2 是来自数据库 2 的查询数据。我使用不允许我添加相同的 Parallels Plesk Panel数据库用户到多个数据库。

如果我在我的网站上使用此代码,是否合适?或者无论如何要这样做?

谢谢...

【问题讨论】:

标签: sql mysql database


【解决方案1】:

实际上你在 1 中有 2 个问题。
一般的和特殊的。
在我看来,两者都有明显的答案。

一个网页中有多少查询是好的性能?

查询数量与性能之间没有直接联系。数据库设置、架构和调优对性能负责。
并且查询的数量应该仅由数据库架构引起。使用尽可能多的查询。不惜一切代价减少查询次数,只为追求性能。

好吃吗?

别无选择有关系吗?

还有一个未说出口的问题:

我应该关心这段代码的 sn-p 性能吗?

你应该吗?
您目前有任何性能问题吗?
如果没有 - 为什么要担心呢?为什么要担心这个特定的 sn-p,而不是其他任何一个?
如果是 - 您必须首先分析您的代码。
然后根据分析结果构建您的优化策略。可能是查询的数量,可能是正确的索引、集群化、服务器升级。
不要盲目射击。采取明智的步骤。

【讨论】:

    【解决方案2】:

    我喜欢保持在 12 岁以下。

    但说真的,这毫无意义。如果假设您有理由在一个页面中有 800 个查询,那么您可以继续这样做。您可能会发现每页的查询数量仅取决于您在做什么,尽管在正常情况下我会惊讶地看到超过 50 个(尽管这些天,很难意识到有多少如果您正在抽象您的数据库调用,那么您正在这样做)。

    慢查询更重要

    我曾经对某个基于 PHP 的论坛软件感到沮丧,它在一个页面中有 35 个查询并且运行速度非常慢,但那是很久以前的事了,我现在知道特定安装运行缓慢的原因与此无关一页有 35 个查询。例如,大部分时间只有一两个查询占用了大部分时间。它只是有几个非常慢的查询,这些查询由放置良好的索引修复。

    我认为识别和修复慢查询应该先于识别和消除不必要的查询,因为它可能会产生更大的影响。
    甚至考虑到三个快速查询可能比一个慢查询快得多——查询的数量不一定与速度有关。有时,您可以通过将慢速查询拆分为多个查询来减少负载并加快页面速度。

    尝试缓存

    有多种方法可以缓存应用程序的某些部分,这些方法可以真正减少您执行的查询数量,而不会减少功能。如今,memcached 之类的库使这变得非常简单,但运行速度非常快。与减少查询数量相比,这还有助于提高性能。

    如果查询确实没有必要,并且性能确实很重要,则删除/组合它们

    首先考虑寻找慢查询并优化它们,或者缓存它们的结果。

    【讨论】:

      【解决方案3】:

      测量它。

      对于上面概述的特定情况,如果可能,我会合并为一个联接。

      一般来说,每个请求有多个查询是很正常的。

      许多网站的每个查询都有数十个请求,而且它们的性能相当不错。

      使用像 Apache bench 这样的负载测试器。 (如果您安装了 Apache,请键入 ab 以查看参数)

      【讨论】:

      • 我想是的。但我不能将来自不同数据库的 2 个查询组合在一起。
      【解决方案4】:

      我只是在这里遇到了同样的问题。

      问题是您在循环中使用查询。如果您的记录 a 有 10 行,它会进行 10 次查询。如果您的记录“a”有 100 行,它将进行 100 次查询。因此,您的记录“a”的行数越多,情况就越糟。

      解决方案是将请求放在一个数组中,并使用正确的 foreach 循环来显示相同​​的内容,只需 2 个查询。我找到了This site,对这个话题非常清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 2012-01-20
        • 1970-01-01
        相关资源
        最近更新 更多