Mysql SQL查询执行时间过长
我有两张桌子。表1(问题)有两列“qid”(问题id)和“问题”。表2(答案)有“aid”(答案id)、“qid”和“答案”。表2中的“qid”是表1中的外键,单个问题可能有多个答案 两个表都有30000多个条目 我做了一个循环Mysql SQL查询执行时间过长,mysql,sql,Mysql,Sql,我有两张桌子。表1(问题)有两列“qid”(问题id)和“问题”。表2(答案)有“aid”(答案id)、“qid”和“答案”。表2中的“qid”是表1中的外键,单个问题可能有多个答案 两个表都有30000多个条目 我做了一个循环 for(each qid) { select question from table1 where qid = id; select answer from table2 where qid = id; } 传递的ID数为10(到循环)。执行查询大约需要18秒。 这么
for(each qid)
{
select question from table1 where qid = id;
select answer from table2 where qid = id;
}
传递的ID数为10(到循环)。执行查询大约需要18秒。
这么多的延迟是正常的还是这种方法有问题。我想知道是否有任何方法可以使上述查询更快。您可以在单个查询中完成,这应该会快得多
SELECT t1.qid, t1.question, t2.aid, t2.answer
FROM table1 t1
INNER JOIN table2 t2 ON t2.qid = t1.qid
WHERE t1.qid IN (?,?,?,etc.);
或者你可以
SELECT t1.qid, t1.question, t2.aid, t2.answer FROM table1 t1, table2 t2 WHERE t1.qid=t2.qid AND t1.qid IN(...some condition...);
我完全同意@wvdz 此外,这是一个通用列表,列出了您可以执行哪些操作来提高选择的性能:
关于主键的注意事项:如果您想了解更多关于主键使用的信息,我在过去给出的这个答案解释了我如何使用主键以及为什么。。。提到这一点是因为,根据我的观点和经验,每个表都应该包含一个主键:当然,20年前=)这种连接表的方式已经过时了。您为表编制索引了吗?