我正在创建一个基于php和mysql的MCQ测验。以下是我主要表格的结构:
测验表:测验ID,quiz_category 类别表:id,title ... 问题表:id,quiz id,categoryid,title ... 答案表:id,question id ...
首先,我在表格中填写了150多个测验,4个类别,14000多个问题和每个问题的权利。
为节省时间,对于每个问题,从答案表https://stackoverflow.com/editing-helpalongwith中提取正确答案3其他随机答案。
现在当我用两个小测验进行测试时,它运行正常。但是通过150次测验,出现了几个问题:
您可以在我之前的Stackoverflow查询中看到我正在使用的代码。 https://stackoverflow.com/questions/14826573/randomising-questions-and-answers-php-quiz-not-working
对于测验程序的理想查询应该是什么?
答案 0 :(得分:0)
我将提供一些有关如何提高性能的提示,但这些提示是通用的,可能不完整。
通过简要地查看PHP和SQL语句from your previous question,索引有一些逻辑位置。要添加索引,请转到MySQL manual以获取更多信息
$sql4="select * from answers where question_id=".$row2['id'];
question_id应该有一个索引
$sql2="select * from questions where quiz_id=".$_SESSION['quizid'];
quiz_id应该有一个索引
添加这两个索引也会提高对此
的选择性$sql3="select * from answers where question_id in (select id from
questions where quiz_id =$row2[quiz_id]) order by rand()";
这将有助于您之前为每个查询执行全表扫描。
你的另一个问题是你有一个循环,并且在每次迭代时你发送命令来查询数据库,你应该在循环之前立即收集所有信息,然后使用它迭代而不是每次迭代发送单独的查询。 / p>