【问题标题】:MCQ quiz is slow to load and randomization does not workMCQ 测验加载缓慢且随机化不起作用
【发布时间】:2013-02-04 04:59:27
【问题描述】:

我正在创建一个基于 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

您知道测验程序的理想查询应该是什么吗?

【问题讨论】:

  • 您是否进行了一些分析以确定性能不佳是与数据库(查询等)还是应用程序逻辑(循环等)有关?
  • 查看您的方案和索引也会有所帮助
  • 嗨,史蒂夫,我是 php 编程新手。您要我发布表格的结构吗?另外,我在之前的帖子中发布了查询数据库的代码。 stackoverflow.com/questions/14826573/…
  • 是的,我确实看到了您的 php 代码,但是您是否知道 PHP 代码是否是导致性能问题的原因,或者您正在运行的 SQL 查询是否执行缓慢。我猜想查看您的索引(或向相关字段添加索引)会有所帮助 - 但我需要查看您的数据库方案才能提出建议。
  • 这里是数据库结构:

标签: php mysql


【解决方案1】:

我将提供一些关于如何提高性能的提示,但是这些都是通用的,可能并不完整。

通过简要查看您的 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()";

这将有助于您像以前一样对每个查询执行全表扫描。

您的另一个问题是您有一个循环,并且在每次迭代中您都发送命令来查询数据库,您应该在循环之前立即收集所有信息,然后使用它进行迭代,而不是每次迭代都发送单独的查询。

【讨论】:

  • 我想添加评论,但与我的答案无关。我强烈建议您学习索引以及 MySQL 中的连接。分析您的应用程序和数据库将帮助您识别性能问题以及根本原因。
  • 史蒂夫,非常感谢您的数据库提示。我正在努力学习有关该主题的所有知识,因为编写测验的人不再可以修复它。所以,我有一个包含 50000 多个问题和答案的数据库,但没有运行它的代码。 :-) 所以,我非常感谢你的提示。再次感谢您。
  • @user1589406 使用我提供的链接添加索引会有很大帮助。改变循环也将有所帮助。如果这是正确答案,您可以将其标记为这样以帮助其他用户。我强烈推荐 Baron Schwartz、Peter Zaitsev 和 Vadim Tkachenko 所著的《高性能 MySQL》一书
猜你喜欢
  • 2012-11-23
  • 2013-12-14
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多