繁体   English   中英

将一些数据添加到数据库后,php更新代码非常慢?

[英]Very slow php update code after adding some data to the database?

我有一个足球梦幻联赛php脚本,有20个团队和分配给这些团队的400多名球员,并且我有500个用户。

每个星期都应该为每个球员分配一个分数,这样最终每个用户将从他的阵型得到一个总积分,这将产生该赛季的排名。

通常会添加第一周点,但是对于第二周点,addpont部分变得如此缓慢,而对于第三周点,则会出现套接字超时错误。

这是我用来向用户添加点的代码:

// Adding Point To the user player list
$sql_user="select * from ".$prev."user LIMIT 0, 100 ";  

$re_user=mysql_query($sql_user);  
while($d_user=mysql_fetch_array($re_user))  
{  
$userID=$d_user['id'];  

  $sql_addpointgroup="select * from ".$prev."addpoint group by weekno order by weekno";  
  $re_addpointgroup=mysql_query($sql_addpointgroup);  
  while($d_addpointgroup=mysql_fetch_array($re_addpointgroup))  
  {     
      $points=0;  
      $sql_addpoint="select * from ".$prev."addpoint where   weekno='".$d_addpointgroup['weekno']."'";  
      $re_addpoint=mysql_query($sql_addpoint);  
      while($d_addpoint=mysql_fetch_array($re_addpoint))  
      {  
        $points=$d_addpoint['points'];  
        $sql_weekstatistic="select * from ".$prev."weekstatistic where   weekno='".$d_addpointgroup['weekno']."' and userID='$userID' and playerID='".$d_addpoint['playerID']."'";  
        $re_weekstatistic=mysql_query($sql_weekstatistic);  
        if(mysql_num_rows($re_weekstatistic)>0)  
        {  
            $sql_update="update ".$prev."weekstatistic set points='$points' where weekno='".$d_addpointgroup['weekno']."' and userID='$userID' and playerID='".$d_addpoint['playerID']."'";  

            mysql_query($sql_update);  
        }  
      }  
}     
}  

我已将每次提交的用户数限制为100个,即使如此,代码仍然很慢。

速度仅与此代码有关,其他网站部分则正常工作。

有什么方法可以以其他更快的方式编写代码,或者还有其他我可以做的事情?

提前谢谢了,

select * from

希望您知道SELECT查询中*的含义。 这意味着ALL COLUMNS 您不需要每行所有列的值。 在查询中要具体,仅选择所需的列。

例如,此查询:

$sql_weekstatistic="select * from ".$prev."weekstatistic where   weekno='".$d_addpointgroup['weekno']."' and userID='$userID' and playerID='".$d_addpoint['playerID']."'";  

您已经具有以下价值:

weekno @ $d_addpointgroup['weekno']
userID @$userID
playerID @$d_addpoint['playerID']

基于其他查询。

但是,您仍然使用SELECT * FROM

这是我有关性能和SQL的小技巧。

顺便说一句,使用mysql_real_escape_tring()或,甚至更好,请按照@lshikawa的建议移至mysqliPDO ,以保护您的查询。

除了建议您遵循该线程中其他人员的建议之外,我不会提及SQL注入的问题。 认真地说-如果您要人们提交个人数据以存储在数据库中,则应保护他们免遭数据被盗。

您的过程缓慢的原因可能是双重的。

首先,当只需要一个查询时,您使用5个查询。 您要向数据库查询用于查询更多问题的大量数据-在不了解您的模式的情况下,很难为您提供有效的替代方法,但是类似:

update ".$prev."weekstatistic 
set      points   = ap.points 
from     weekstatistic ws, 
         addpoint      ap, 
         user          u
where    weekno   = //work out the current weeknumber 
and      userID   = u.userID 
and      playerID = ap.playerID'

这应该达到相同的效果,但是只需要一个查询即可; 那应该更快。

其次,您的表上可能没有正确的索引-这是“由于表中的数据越来越多,查询速度变慢”的经典原因。 阅读EXPLAIN,并添加一些索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM