Mysql查询需要时间

时间:2010-11-26 12:27:27

标签: optimization mysql subquery

Qe:1)

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

---它有超过16k的记录。

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 :(得分:0)

从not in:

中删除它
b.invoiceorderdate <= 'CurrrntDate' and

答案 1 :(得分:0)

这不能解决您的问题,但您不应在where子句中使用a.invoiceorderid = b.invoiceorderid - 尝试使用此查询代替第一个查询。 Natural join比制作整个表的交叉产品并仅选择那些匹配的行更有效。

select a.finishproductid 
from tblt_invoiceorderitems a 
natural join tblm_invoiceorder b 
where b.invoiceorderdate <= 'Current Date'

答案 2 :(得分:0)

“选择表1,表2,表3”maby的结果为16k ^ 3或16k ^ 2。您需要使用主键进行“内连接”或“连接”以进行搜索。

见你。