Mysql 我的查询在加入时非常慢,但它们很快

Mysql 我的查询在加入时非常慢,但它们很快,mysql,Mysql,我的两个查询分别工作得很快,但是当我加入两个查询时,执行起来需要很多时间 SELECT b.*, a.* FROM (SELECT r.vou_no, r.vou_date, r.lr_date, r.due_date, r.vac_code, r.vamount, r.vmfg_am

我的两个查询分别工作得很快,但是当我加入两个查询时,执行起来需要很多时间

SELECT b.*, 
       a.* 
FROM   (SELECT r.vou_no, 
               r.vou_date, 
               r.lr_date, 
               r.due_date, 
               r.vac_code, 
               r.vamount, 
               r.vmfg_amt, 
               r.vter_cd, 
               r.mkt_year, 
               r.mnth_code 
        FROM   ledfile AS r 
        WHERE  r.mkt_year = 2012 
               AND r.mnth_code BETWEEN 201210 AND 201306 
               AND r.div_code = 1 
               AND r.vdepo_code = 21 
               AND r.vbook_cd = 80 
               AND Ifnull(r.del_tag, '') <> 'D' 
        ORDER  BY r.vac_code, 
                  r.vou_date, 
                  r.vou_no) b, 
       (SELECT a.vac_code vcode, 
               a.vouno, 
               a.bill_date, 
               a.vamount  vamt, 
               a.vou_date vdate 
        FROM   rcpfile a 
        WHERE  a.mkt_year = 2012 
               AND a.div_code = 1 
               AND a.vdepo_code = 21 
               AND a.vbook_cd IN ( 20, 21, 22, 90, 
                                   98, 80 ) 
               AND Ifnull(a.del_tag, '') <> 'D' 
        ORDER  BY a.vac_code, 
                  a.bill_date, 
                  a.vouno) a 
WHERE  a.vcode = b.vac_code 
       AND a.vouno = b.vou_no 
       AND a.bill_date = b.vou_date; 

像这样的怎么样

SELECT b.vou_no
     , b.vou_date
     , b.lr_date
     , b.due_date
     , b.vac_code
     , b.vamount
     , b.vmfg_amt
     , b.vter_cd
     , b.mkt_year
     , b.mnth_code
     , a.vac_code vcode 
     , a.vouno
     , a.bill_date
     , a.vamount vamt
     , a.vou_date vdate 
  FROM ledfile b 
  JOIN rcpfile a 
    ON a.mkt_year = b.mkt_year
   AND a.div_code = b.div_code
   AND a.vdepo_code = b.vdepo_code
   AND a.del_tag = b.del_tag
 WHERE a.vbook_cd IN (20,21,22,90,98,80) 
   AND COALESCE(b.del_tag,'') <> 'D' 
   AND b.mkt_year = 2012 
   AND b.mnth_code BETWEEN 201210 AND 201306 
   AND b.div_code = 1 
   AND b.vdepo_code = 21
   AND b.vbook_cd = 80

请你把这部分分开好吗?告诉我你在做什么,不要把代码挂在墙上。要在多个表上的查询中执行更快的联接,表上有适当的索引是很重要的。在查询中加入的列必须在索引中。这里是否有任何理由使用子查询而不是常规加入?这也有助于制定解释计划。当我运行此查询时,错误代码:2008 MySQL client耗尽了@草莓的内存