繁体   English   中英

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

[英]SQL query taking too much time to exectute

我有两张桌子。 表1(问题)有2列“qid”(问题ID)和“问题”。 表2(答案)有“援助”(答案ID),“qid”和“答案”。 表2中的“qid”是表1中的外键,单个问题可能有多个答案。

两个表都有30,000多个条目。

我做了一个循环,

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。

此外,这是一些可以提高选择性能的常规列表:

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

此外,还有一些用于调优sql查询的好资源: http//beginner-sql-tutorial.com/sql-query-tuning.htm http://www.quest.com/whitepapers/10_SQL_Tips.pdf

关于主键的注意事项:如果您想了解有关主键使用的更多信息,我在过去提供的这个答案解释了我如何使用主键以及为什么......提到这一点,因为在我看来,每个表都应该包含一个主键key: MySQL - 每个表都应该包含它自己的id / primary列吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM