Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL服务器已经消失——在MySQL php循环之后_Php_Mysql - Fatal编程技术网

MySQL服务器已经消失——在MySQL php循环之后

MySQL服务器已经消失——在MySQL php循环之后,php,mysql,Php,Mysql,我在一个有超过20MM个条目的数据库上进行查询,这意味着我将查询分解为几个较小的查询 问题是,如果我尝试获取页面未加载的20毫米条目,并得到通知:MySQL服务器已离开,并显示一个空白屏幕,没有标题和内容。但是,如果我获取了5毫米的条目,则页面不会正确加载,并显示内容: 这是我的密码 error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); ini_set('

我在一个有超过20MM个条目的数据库上进行查询,这意味着我将查询分解为几个较小的查询

问题是,如果我尝试获取页面未加载的20毫米条目,并得到通知:MySQL服务器已离开,并显示一个空白屏幕,没有标题和内容。但是,如果我获取了5毫米的条目,则页面不会正确加载,并显示内容:

这是我的密码

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
ini_set('memory_limit', '1000M');
for($n=0; $n<20000000; $n=$n+500000){
    $m=500000;
$query = "SELECT * FROM user_likes LIMIT ". $n .",". $m; 
//echo $query;
$result = mysql_query($query) or die(mysql_error());

// craete arrays
while($row = mysql_fetch_array($result)){
    set_time_limit(0);
    $like[$row['name']]=$like[$row['name']]+1;
    if($like[$row['name']]==375) $likes375 ++; 

}


}

// print the size
echo count($like)."<br>";
echo "375: ".$likes375; 

如果有人能帮我,我将不胜感激。谢谢

听起来像是您在备份它,您需要等待它完成,而且php的最大执行时间比查询完成所需的时间要短。建议您将需要做的事情分成更小的块。

您不能在MySQL端更有效地完成吗

SELECT count(*) FROM user_likes where name = '375'
这将比您的方法快得多。对名称进行索引将使其速度更快。

使用下面的查询

从中选择类似375的计数* 选择COUNT*作为名称\u COUNT 从用户的喜好 按名称分组 计数 其中name_count>375
这将显示计数超过375的所有名称:

SELECT name
FROM user_likes
GROUP BY name
HAVING COUNT(*) >= 375

不过,如果要通过的行数超过2000万,这仍然是相当低效的;最好将这些压缩的数据保存在一个较小的表中。

如果您只是在不使用craete数组部分的情况下执行查询,是否仍然会出现超时错误?您真的想设置\u time \u limit 20MM次吗?如果您试图获得一些喜欢的数据,那么将其作为查询的一部分而不是在PHP中执行会更有效吗?当你可以向MySQL查询一个计数时,为什么要将所有20MM的记录都带入PHP中呢。。。哪里我不知道在mysql里怎么做。。。只有当计数高于375时,我才需要按名称和siplay分组计数。这是否回答了您的问题?事实上,我不计算name=375,我在检查每个名字出现的次数。如果出现375次以上,则计数上升一次,说明问题。。当使用此命令时,我收到:在查询过程中与MySQL服务器的连接丢失。。。。数据库有超过2000万行,因此可能需要的时间太长,连接也太慢closed@DanStern我想您可以使用MySQL命令行客户端单独测试速度,也可以使用解释功能来了解如何优化速度,虽然我怀疑你能用这种方式优化它。当使用这个方法时,我收到:在查询过程中与MySQL服务器的连接丢失。。。。数据库有超过2000万行,因此可能需要的时间太长,连接也太慢closed@DanStern尝试为名称字段添加索引。如果可能,请使用id字段而不是名称进行分组。