Mysql Query занимает много времени - PullRequest
1 голос
/ 26 ноября 2010

Qe: 1)

select 
  a.finishproductid 
from 
  tblt_invoiceorderitems a, tblm_invoiceorder b 
where 
  b.invoiceorderdate <= 'Current Date' and 
  a.invoiceorderid = b.invoiceorderid 

--- в нем более 16 тыс. Записей.

Qe: 2)

select jobcardid, stockcode 
from tblm_finishproduct 
where productionentrydate <= 'Current Date'

--- у него также более 16k записей.

Теперь я хочу из второго запроса, но не в первом.

select jobcardid, stockcode 
from 
  tblm_finishproduct 
where 
  productionentrydate <= 'CurrrntDate' and 
  finishproductid not in 
  (
    select 
      a.finishproductid 
    from 
      tblt_invoiceorderitems a, tblm_invoiceorder b 
    where 
      b.invoiceorderdate <= 'CurrrntDate' and 
      a.invoiceorderid = b.invoiceorderid
  );

Теперь нужно время

Ответы [ 3 ]

0 голосов
/ 26 ноября 2010

Это не решает ваш вопрос, но вы не должны использовать a.invoiceorderid = b.invoiceorderid в предложении where - попробуйте этот запрос вместо первого. Естественное объединение более эффективно, чем создание перекрестного произведения всей таблицы и выбор только тех строк, которые соответствуют.

select a.finishproductid 
from tblt_invoiceorderitems a 
natural join tblm_invoiceorder b 
where b.invoiceorderdate <= 'Current Date'
0 голосов
/ 26 ноября 2010

результат "select Table1, Table2, Table3" может быть 16k ^ 3 или 16k ^ 2. Вам нужно сделать «внутреннее соединение» или «соединение», используя первичный ключ, чтобы отслеживать результаты поиска.

см.

0 голосов
/ 26 ноября 2010

Удалить это из не в:

b.invoiceorderdate <= 'CurrrntDate' and
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...