gpt4 book ai didi

php - 查询正确执行,但性能不佳

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:47 25 4
gpt4 key购买 nike

我制作了一个每天收集信息的数据库。就像日历一样,数据库存储成员(member)的每日金额。如果月份与任何现有月份 (M-Y) 不匹配,数据库将创建一个新的 html 月份表。我已经解决了这个问题,如下:

mysql_query("something goes here");
while(condition)
{
mysql_query("something goes here")
while(condition)
{
mysql_query("something goes here");
while()
{
....................
}
........................
}
}

当我发现这个算法时,它运行良好。然而,几天后,它给我的服务器带来了沉重的负担。然后我在 PHP 中尝试了相同的算法(但我不能这样做)。我怎样才能让这个运行得更快?代码如下:

        $q2=mysql_query("SELECT  a.member_id,a.dates,MONTH(dates) AS months,
YEAR(dates)AS years,sum(amount) as sums
FROM account AS a
left join member as m
on(a.member_id=m.member_id)
GROUP BY (SELECT EXTRACT(YEAR_MONTH FROM dates))
ORDER by dates DESC
");
$k=0;
while($data2=mysql_fetch_assoc($q2))
{
$months=$data2['months'];
$years=$data2['years'];
$daten = new DateTime($data2['dates']);

print "<tr><th align='left'><b>".$daten->format('F-Y')."</b></th>";

$q3=mysql_query("select * from member");

while($data3=mysql_fetch_assoc($q3))
{
$id3=$data3['member_id'];
$q4=mysql_query("
SELECT SUM(amount) AS total FROM account
WHERE member_id=$id3
AND month(dates)=$months
AND year(dates)=$years
");
while($data4=mysql_fetch_assoc($q4))
{
$total=$data4['total'];

print "<td class='total'>".number_format($total)."</td>";
}
}
print "<td class='total'><b>".$data2['sums']."</b></td></tr>";
$k=$k+$data2['sums'];
}

最佳答案

除其他外:

  • 您正在为第一个查询中的每一行运行查询 SELECT * FROM member。此查询独立于循环,因此每次都重新运行它很浪费。

  • 对于 SELECT * FROM member 查询的每个结果,您正在运行另一个查询(SELECT SUM(amount) AS total FROM account ...)。这个查询有几个问题:

    • 首先,可以使用 GROUP BY 将此查询合并到上一个查询中,以避免必须为每个成员运行一个查询。像这样的东西:

      SELECT member_id,SUM(amount) AS total FROM account WHERE ... GROUP BY member_id

    • 其次,您使用的是 MONTH(dates) = $months AND YEAR(dates) = $years。这是低效的,因为它迫使服务器检查每一行;将其转换为 dates 的范围(例如,dates BETWEEN '$year-$months-01' AND '$year-$months-31')会加快速度如果日期有合适的索引。

总的来说:避免循环查询。在可能的情况下,生成页面所涉及的查询数量应该始终是一个很小的、几乎恒定的数字。它不应随您的数据一起增长。

关于php - 查询正确执行,但性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com