SQL查询花费了太多时间来执行

时间:2014-07-11 21:35:32

标签: mysql sql

我有两张桌子。表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秒才能执行。 这种延迟是正常的还是这种方法有问题。我想知道是否有任何方法可以更快地进行上述查询。

3 个答案:

答案 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。

此外,这是为提高选择性能而可以做的一般事项列表:

  1. 分析&可能会重写你的查询,(这里有很多未说明的内容,所以我建议你访问我所包含的资源链接之一,或者两者兼而有之。)
  2. 如果查询包含有效的主键,请确保 您实际上已为该列创建了主键约束 (这会创建一个索引)
  3. 考虑为将在其中使用的任何列创建索引 查询的条件(类似于第一点,如果您认为需要更多优化,则需要阅读此内容,这对于表中的数据越多越重要)
  4. 此外,还有一些用于调优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?