2012-04-04 238 views
0

MySQL查詢時間太長的時間給結果查詢花費太長時間

Select pty_code from sis.tblBf a where a.BFno 
     not in (select b.BNo from sislatest.tbltransaction b) 

注:我比較兩個不同的數據庫和獲得的區別。

Select A.pty_code from DataBase1.TableName A 
     where A.BFno NOT IN (SELECT B.BNo From DataBase2.TableName B) 
+1

需要很多信息。 「太久」要多久?你的表格是如何定義的?桌上有什麼指數?每個表中有多少數據? – 2012-04-04 07:04:32

+1

請養成代表餐桌別名的習慣。例如。 sis.tblBf應該被別名爲'bf'而不是'a',你會在6個月的時間裏感謝我! – 2012-04-04 07:27:20

回答

1

使用子查詢,特別是使用「not in」子句時,速度會變慢。我建議用where子句中的「is null」重寫到左外連接。

SELECT a.pty_code from sis.tblBf a LEFT JOIN sislatest.tbltransaction b on b.BNo = a.BFno WHERE b.BNo IS NULL 

我認爲這將工作,但沒有數據庫來測試,我寫它盲目。

如果仍然很慢,我會看看並確保b.BNo和A.BFNo上有索引。

+0

你能解釋最後一把鑰匙:哪裏b.BNo是空的 這實際上是什麼意思? – Sensa 2012-04-04 16:19:48

+1

左連接將第一個表中的所有行組合起來,並與第二個表中的行進行匹配。如果第二個表沒有任何匹配,則這些字段的值將爲NULL。在SQL中,NULL不等於其他任何東西(甚至是NULL),所以你必須指定IS NULL而不是類似b.BNo = null的東西。 – 2012-04-05 04:58:14