我在这里搜索但是找不到任何使用我能想到的搜索词。这里可能有另一篇帖子可以回答我的问题,但我找不到任何帖子。
PHP手册指出:
使用此方法获取大型结果集将导致繁重 对系统和可能的网络资源的需求。
它还继续说你应该使用WHERE和ORDER BY来减轻负载,这是非常有意义的。但这仍然没有回答这个问题,多少钱太多了?你如何定义一个太大的结果集?
例如,我为我正在创建的类编写了这段代码:
public function getQuestions($quiz_id){
$quiz_id = parent::onlyNums($quiz_id);
$stmt = $this->db->prepare(
"SELECT quiz.title, quiz.description, questions.question,
questions.answer, questions.wrong_one, questions.wrong_two,
questions.wrong_three FROM quiz, questions WHERE
questions.quiz_id = :quiz_id AND quiz.id = questions.quiz_id");
$stmt->bindValue(':quiz_id',$quiz_id,PDO::PARAM_INT);
try
{
$stmt->execute();
if($stmt->rowCount() > 0 )
{
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}else{
echo "No Items match the query";
exit();
}
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
现在,对于我正在构建的应用程序,我不希望此查询检索大量结果,因为应用程序的性质不应该有那么多。但是在某些时候,如果有人发疯并在单个测验中添加了数百万个问题,那么这个脚本会失败吗?
感谢您提供任何信息或建议。
答案 0 :(得分:4)
我认为固定尺寸太大了。这实际上取决于您运行的硬件/网络。您可以在具有100GB RAM的专用服务器上处理比使用小型EC2实例更大的数据集。但是,您应该始终努力使查询尽可能高效,并且只返回当前操作所需的行。
答案 1 :(得分:2)
这个waring实际上在fetchAll()上实际上不,但一般来说是健全的。
事实上,这个函数只是简单循环查询结果并将它们添加到数组中的语法糖。所以,如果有数百万的问题,你的页面肯定会崩溃,但不是因为fetchAll()而是因为数据量。
因此,对于普通网页,可以使用此功能 但是对于一些基于cron的数据挖掘脚本,使用它是不明智的 - 创建一个循环并逐个处理每一行而不将它们存储到数组中。
答案 2 :(得分:0)
检查的一种方法是使用限制,运行10个文件,每个文件都有不同的限制。首先,1000,秒,2000,然后3000等等,看看你何时收到错误。你会从中得到什么想法。