0

我在 MySQL db 中的表上运行带有多个“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 回答