簡體   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