我有两张桌子。表1(问题)有2列" qid" (问题ID)和"问题"。表2(答案)有"援助" (回答id)," qid"和"答案"。 " qid"表2中的外键是表1中的外键,单个问题可能有多个答案。
两个表都有30,000多个条目。
我做了一个循环,
for(each qid)
{
select question from table1 where qid = id;
select answer from table2 where qid = id;
}
传递的id数是10(到循环)。查询大约需要18秒才能执行。 这种延迟是正常的还是这种方法有问题。我想知道是否有任何方法可以更快地进行上述查询。
答案 0 :(得分:3)
您可以在单个查询中执行此操作,该查询应该快得多。
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.);
答案 1 :(得分:0)
或者你可以做到
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...);
答案 2 :(得分:0)
我完全同意@wvdz。
此外,这是为提高选择性能而可以做的一般事项列表:
此外,还有一些用于调优sql查询的好资源: http://beginner-sql-tutorial.com/sql-query-tuning.htm http://www.quest.com/whitepapers/10_SQL_Tips.pdf
关于主键的注意事项:如果您想了解有关主键使用的更多信息,我在过去提供的这个答案解释了我如何使用主键以及为什么......提及这一点,因为在我看来&经验,每个表都应包含一个主键:MySQL - Should every table contain it's own id/primary column?