2017-07-05 300 views
0

我有這兩個表與成千上萬的數據,我會尋找比賽1:1的兩個表。我有下面的查詢,但在限制已經超過1000回開始變慢,花了將近一個小時,我收到一個結果之前,我用我的本地XAMPP數據庫,這和有一個4G(3.4G可用)RAM PC。爲什麼mysql查詢需要很長時間才能收到結果?

是否有任何其他的方式來提高和使查詢速度更快?

預先感謝您對於那些誰幫助。

SELECT a.rNum, 
     a.cDate, 
     a.cTime, 
     a.aNumber, 
     a.bNumber, 
     a.duration, 
     a.tag, 
     a.aNumber2, 
     a.bNumber2, 
     'hasMatch', 
     a.concatDate, 
     a.timeMinutes 
FROM tableOne a 
INNER JOIN 
tableTwo b ON a.aNumber2 = b.aNumber2 
AND a.bNumber2 = b.bNumber2 
WHERE a.hasMatch = 'valid' 
AND (a.duration - b.duration) <= 3 
AND (a.duration - b.duration) >= -3 
AND TIMEDIFF(a.concatDate,b.concatDate) <= 3 
AND TIMEDIFF(a.concatDate,b.concatDate) >= -3 
LIMIT 0,100; 

回答

1

顯而易見的問題是:你有索引嗎?

書面,最好的指標,試圖對tableOne(aNumber1, aNumber2)tableTwo(bNumber1, bNumber2)

如果您提供的樣本數據,預期的效果,並且你正在嘗試做一個解釋,可能會有進一步的建議。

+0

謝謝您指出。 這兩個表來自兩個不同的用戶。根據條件,它們都具有相同的aNumber2和bNumber2和所述時間差小於3秒負或正僅然後用這兩個表都條目將被標記爲匹配,但是,如果一個條目具有的其他表中的多個匹配,只有1個條目將在另一個表上標記,其餘的將保持不變。但aNumber的和B-號碼這兩個表可以是不同的或者其他人有一個前綴和其他沒有前綴,反之亦然。 – BlackChub

0

您可以嘗試許多步驟簡而言之

  • 首先執行EXPLAIN語句,並採取相應的行動
  • 確保所比較的屬性是相等長度的
  • 讓你的鑰匙儘可能短
  • 考慮加入,你需要太索引(如果該值是適合索引在WHERE子句中,你經常執行此查詢)
  • 做一個A NALYZE TABLE
  • 避免任何冗餘數據或儘可能使用NULL值
相關問題