我正在MySQL数据库中的表上运行多个“where in 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个条目。其余的要小得多。
我意识到我应该将大表中的一些行编入索引。把它隔开。还有其他问题吗?
答案 0 :(得分:1)
您应该使用joins并考虑至少在foreign keys
上创建索引尝试以下
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