2013-02-19 29 views
1

我正在基於php和mysql創建一個MCQ測驗。這裏是我的主表的結構:MCQ測驗加載速度慢並且隨機化不起作用

測驗表:測驗ID,quiz_category 類別表:ID,標題... 問題表:ID,測驗ID,類別ID,標題...... 答案表:ID ,問題ID ...

要開始的事情,我有表填充150 +測驗,4類,14000 +問題和rightanswers每個。

爲了節省時間,對於每個問題,正確的答案是從答案表https://stackoverflow.com/editing-helpalongwith 3其他隨機答案中提取。

現在,當我用兩次測驗測試它時,它工作正常。但隨着150次測驗,一些問題也出現了:

  • 數據庫是緩慢和更高測驗需要永遠載入問題
  • 答案的隨機不工作了 - 用正確的答案一起,其他選項顯示相同的條目,使用戶可以輕鬆猜出正確的答案。

你可以在我以前的Stackoverflow查詢中看到我正在使用的代碼。 https://stackoverflow.com/questions/14826573/randomising-questions-and-answers-php-quiz-not-working

關於測驗計劃的理想查詢應該如何工作的任何想法?

+0

你有沒有做過一些分析,以確定性能差是否與數據庫(查詢等)或應用程序邏輯(循環等)有關? – Steve 2013-02-19 13:34:03

+0

看看你的計劃和索引也將有所幫助 – Steve 2013-02-19 13:34:55

+0

嗨史蒂夫,我是新的PHP編程。你想讓我發佈表格的結構嗎?另外,我在我之前的文章中發佈了查詢數據庫的代碼。 HTTP://計算器。com/questions/14826573/randomising-questions-and-answers-php-quiz-not-working – user1589406 2013-02-19 13:47:15

回答

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()"; 

這將有助於像以前一樣,您將對每個查詢執行全表掃描。

你的另一個問題是你有一個循環,並且在你發送命令來查詢數據庫的每個迭代中,你應該在循環前一次收集所有信息,然後迭代使用它,而不是每次迭代發送單個查詢。

+0

我想添加一條評論,但它與我的回答沒有關係。我強烈建議你學習索引,並加入MySQL。分析您的應用程序和數據庫將有助於確定性能問題以及根本原因。 – Steve 2013-02-20 09:50:17

+1

Steve,感謝您的數據庫提示。我正在努力學習關於該主題的所有知識,因爲編寫測驗的人不再可以修復它。所以,我有一個50000+的問題和答案的數據庫,但沒有代碼來運行它。 :-)所以,我非常感謝你的提示。再次感謝你。 – user1589406 2013-02-21 13:14:01

+0

@ user1589406用我提供的鏈接添加索引將有很大幫助。改變循環也將有所幫助。如果這是正確的答案,您可以將其標記爲幫助其他用戶。我可以強烈推薦由Baron Schwartz,Peter Zaitsev和Vadim Tkachenko撰寫的「高性能MySQL」一書 – Steve 2013-02-21 13:37:55