php和MySQL:2个请求或1个请求?

时间:2009-01-22 16:06:45

标签: php mysql

我正在使用MySQL作为我的数据库在php中构建一个wepage。

哪种方式更快?

  1. 使用后续查询向MySQL发出2个请求。

    SELECT FROM FROM FROM;
    SELECT sum(points)FROM data;

  2. 1请求MySQL。将结果保存在临时数组中,并在php中计算总和。

    $ data = SELECT FROM FROM data;

  3. 编辑 - 数据大约200-500行

10 个答案:

答案 0 :(得分:5)

这实际上取决于很多不同的因素。我建议尝试两种方法,看看哪一种更快。

答案 1 :(得分:3)

由于Phill和Kibbee已经非常有效地回答了这个问题,我想指出过早优化是Bad Thing(TM)。写下最简单的内容和个人资料,个人资料,个人资料。

答案 2 :(得分:2)

我们谈论了多少数据?我想说在大多数情况下,MySQL可能会更快地进行这类操作。

编辑:对于你所谈论的那种数据,它可能不会造成很大的不同。但是数据库倾向于针对那些类型的查询进行优化,而PHP则不然。我认为第二个数据库查询可能是值得的。

答案 3 :(得分:1)

如果您想在一行中执行此操作,请使用如下运行总计:

SET @ total = 0;
SELECT points,@ total:= @ total + points AS RunningTotal FROM data;

答案 4 :(得分:1)

在我遇到性能问题之前,我不担心。

答案 5 :(得分:1)

如果您使用两个单独的查询,则需要注意在获取行和数据之间数据发生变化的可能性。得到他们的总和。在出现可观察到的性能问题之前,我会坚持自己进行总结以保持页面的一致性。

答案 6 :(得分:0)

mySQL的效率的一般经验法则是尽量减少SQL请求的数量。每次调用数据库都会增加开销,并且在所需时间方面“昂贵”。

mySQL完成的优化非常好。它可以通过许多连接,嵌套和计算来处理非常复杂的请求,并使其高效运行。

但它只能优化个别请求。它无法检查两个不同SQL语句之间的关系并在它们之间进行优化。

在您的示例1中,这两个语句将向数据库发出两个请求,并且该表将被扫描两次。

您保存结果并自己计算总和的示例2将快于1.这只是一次数据库调用,并且循环遍历PHP中的数据以获得总和比第二次调用数据库更快

答案 7 :(得分:0)

只为了它的乐趣。

SELECT COUNT(points) FROM `data`
UNION
SELECT points FROM `data`

第一行是总数,下一行是数据。

注意:联盟可能很慢,但可以选择。

也可以做更多的乐趣,这支持你对行进行排序。

SELECT 'total' AS name, COUNT(points) FROM `data`
UNION
SELECT 'points' AS name, points FROM `data`

然后通过PHP选择

while($row = mysql_fetch_assoc($query))
{
    if($row["data"] == "points")
    {
        echo $row["points"];
    }

    if($row["data"] == "total")
    {
        echo "Total is: ".$row["points"];
    }
}

答案 8 :(得分:0)

您可以使用这样的联合:

(选择点,null作为数据的总和)union(选择null,从点到数据组的总和(点));

结果将如下所示:  

  point                total
   2                    null
   5                    null
   ...
   null                  7
你可以弄清楚如何处理它。

答案 9 :(得分:-1)

以mySQL的方式做到这一点。让数据库管理器完成它的工作。 mySQL针对此类任务进行了优化