2013-07-10 54 views
1

我有這樣的查詢..優化查詢(MySQL和PHP)

select slno 
from `invoice_master` 
where slno NOT IN (SELECT DISTINCT Inv_slno from `invoice_refresh`) 

我有超過1,40,000記錄兩個表中(invoice_masterinvoice_refresh

此查詢到地獄沒有時間執行。 :(

這是鏈接,我的解釋查詢

enter image description here

幫我找出備用查詢..

+0

那麼,有沒有在'invoice_refresh'表的任何索引,特別是在''Inv_slno列?如果沒有,那麼考慮創建一個 –

+1

如果您不提供給我們這個數據庫結構的片段,我們無法幫助您。另外關於你在哪裏設置idexes的信息會很有幫助。從invoice_refresh和invoice_master slno – ex3v

+0

主密鑰也具有上slno –

回答

1

嘗試刪除NOT IS CLAUSE

已將其刪除,並使用了一個LEFT JOIN

select 
slno 

from invoice_master 
LEFT JOIN invoice_refresh on (Inv_slno = slno) 
where Inv_slno is null 
0

我建議你使用LEFT OUTER JOIN

SELECT m.slno 
FROM `invoice_master` m 
LEFT OUTER JOIN `invoice_refresh` r ON m.slno = r.Inv_slno 
WHERE r.Inv_slno IS NULL 
+0

我認爲一個'INNER JOIN'是對子級較好:'選擇invoice_master slno爲M INNER JOIN invoice_refresh爲R ON m.slno = r.Inv_slno':這將排除非匹配行 – Asenar

+0

我以'INNER JOIN'開始,但這就是要點,我們只需要不匹配的行。 – zessx

+0

這兩個查詢離開連接和innerjoin將完美匹配行。但我需要不匹配的行http://saiportfolio.freeiz.com/explain2.PNG –