Mysql SQL多重选择。。。其中id在和一个不同的

Mysql SQL多重选择。。。其中id在和一个不同的,mysql,sql,select,where-in,Mysql,Sql,Select,Where In,我正在MySQL数据库中的一个表上运行一个带有多个“where id in”子句的查询。我在每个查询中都添加了DISTINCT,以减少结果的数量。仍然锁定了我的MySQL表。有什么我不知道的小毛病,或者我应该试着消除一些小毛病吗?只有第一个是必需的 SELECT DISTINCT id, name FROM TP_Test_Info WHERE id IN (SELECT DISTINCT test_id FROM TP_Test_Sect

我正在MySQL数据库中的一个表上运行一个带有多个“where id in”子句的查询。我在每个查询中都添加了DISTINCT,以减少结果的数量。仍然锁定了我的MySQL表。有什么我不知道的小毛病,或者我应该试着消除一些小毛病吗?只有第一个是必需的

   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有大约32000个条目。其余的要小得多

我意识到我应该为大表中的一些行编制索引。把它隔开。还有其他问题吗?

< P>你应该使用并考虑至少在

上创建索引。 试试下面的方法

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

你为什么不试试加入呢?我听说过加入。我不知道你能像我在下面那样把它们筑巢。我猜这就是帮助和粗鲁的区别。使用连接的好处是什么?我将使用它,只是想知道为什么这是有利的。数据库引擎将更容易优化查询,利用索引等。加上中的
并不是性能最好的操作符,即使它“有意义”,另一种选择可能是使用
EXISTS
。在您的查询中,当您考虑它时,您要求数据库做大量的工作来有效地检查存在性,对于数据库来说,这是通过连接更自然地实现的(考虑“关系”而不仅仅是“逻辑”)。也许最好的办法是查看并比较两个查询的执行计划,看看数据库是如何处理它们的。谢谢!我仍在努力使头脑清醒。我是一名家庭教师,不是一名程序员,所以这些东西并不在我的知识范围之内。就为我自己的网站做吧。