2013-07-10 5 views
1

У меня есть запрос, как это ..Оптимизация запроса (MySQL, PHP)

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

У меня есть более чем 1,40,000 записи в обеих таблицах (invoice_master, invoice_refresh)

этот запрос принимает ад вне времени для исполнения. :(

это ссылка на мой запрос объяснить

enter image description here

Помоги мне, чтобы выяснить, альтернативный запрос ..

+0

Так есть ли какие-либо указатели на 'invoice_refresh' стола, в частности, на колонке' 'Inv_slno? Если нет, подумайте о создании одного –

+1

. Мы не можем вам помочь, если вы не предоставите нам этот фрагмент структуры базы данных. Также информация о том, где у вас есть набор идексов, будет большой помощью. – ex3v

+0

первичный ключ на slno от invoice_refresh и invoice_master также оказывает первичный ключ на slno –

ответ

1

Попробуйте удалить NOT IS CLAUSE

Сняли его, и используется a 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' будет лучше:' select slno from invoice_master AS m INNER JOIN invoice_refresh AS r ON m.slno = r.Inv_slno': Это исключает несоответствие rows – Asenar

+0

Я начал с 'INNER JOIN' ya, но это тот момент, нам нужны только несоответствующие строки. – zessx

+0

эти два запроса слева, и innerjoin будут работать идеально для сопоставления строк. но мне нужны не соответствующие строки http://saiportfolio.freeiz.com/explain2.PNG –