0

MySQL データベースのテーブルで複数の「where id in」句を使用してクエリを実行しています。結果の数を減らすために、各クエリに DISTINCT を入れました。まだMySQLテーブルをロックしています。私が知らないグリッチ、またはいくつかの DISTICT を削除してみる必要がありますか? 最初の DISTINCT だけが必要です。

   SELECT DISTINCT id, name 
   FROM TP_Test_Info 
   WHERE id IN (SELECT DISTINCT test_id 
                FROM TP_Test_Sections 
                WHERE id IN (SELECT DISTINCT section_id 
                             FROM TP_Test_Questions 
                             WHERE id IN (SELECT DISTINCT question_id 
                                          FROM TP_Student_Answers 
                                          WHERE student_id = 751)))

最後のテーブル TP_Student_Answers には、約 32,000 のエントリがあります。残りははるかに小さいです。

大きなテーブルの一部の行にインデックスを作成する必要があることに気付きました。間隔をあけた。他に問題はありますか?

4

1 に答える 1

1

結合を使用し、少なくとも外部キーにインデックスを作成することを検討する必要があります

以下を試してください

SELECT DISTINCT TP_Test_Info.id, TP_Test_Info.name
FROM TP_Test_Info
JOIN TP_Test_Sections 
  ON TP_Test_Sections.test_id = TP_Test_Info.id
JOIN TP_Test_Questions 
  ON TP_Test_Questions.section_id = TP_Test_Sections.id
JOIN TP_Student_Answers 
  ON TP_Student_Answers.question_id = TP_Test_Questions.id
WHERE TP_Student_Answers.student_id = 751
于 2013-08-18T23:59:37.223 に答える