MySQL多表联接

MySQL多表联接,mysql,Mysql,我有来自3个不同表的数据,我需要在它们之间做一些条件选择。DB查询如下: SELECT proddb.onrrnr, proddb.onr AS tellimus, proddb.idnr AS ID, proddb.prod AS toode, proddb.proddate, CASE WHEN

我有来自3个不同表的数据,我需要在它们之间做一些条件选择。DB查询如下:

    SELECT proddb.onrrnr, 
       proddb.onr                 AS tellimus, 
       proddb.idnr                AS ID, 
       proddb.prod                AS toode, 
       proddb.proddate, 
       CASE 
         WHEN pf_prodQtySeq.glLiteNr = 1 THEN pf_ordRowSeq.gl1 
         WHEN pf_prodQtySeq.glLiteNr = 2 THEN pf_ordRowSeq.gl2 
         WHEN pf_prodQtySeq.glLiteNr = 3 THEN pf_ordRowSeq.gl3 
         WHEN pf_prodQtySeq.glLiteNr = 4 THEN pf_ordRowSeq.gl4 
       END                        AS klaas, 
       Sum(pf_prodQtySeq.planQty) AS kogus      
FROM   proddb 
      JOIN pf_prodQtySeq 
         ON proddb.onrrnr = pf_prodQtySeq.onrrnr 
      JOIN pf_ordRowSeq 
         ON proddb.onrrnr = pf_ordRowSeq.onrrnr
WHERE  pf_prodQtySeq.prLineSh = 'HEG' 
       AND pf_prodQtySeq.planQty > 0 
GROUP  BY proddb.idnr 
ORDER BY klaas DESC LIMIT 1000,25;
编辑:在那里的代码中,还有ORDER和LIMIT子句,LIMIT是指将查询执行速度降低到ˋ10秒,而没有LIMIT的查询只需要不到1秒的时间。如何优化限制

此查询工作正常,但执行时间太长。这个查询大约需要5秒钟,尽管每个表只包含不到50000行。还尝试了两倍的速度和更多的RAM服务器;同样的时间。表被编入索引。 查询是否与加快速度有关,或者我需要合并表。这意味着所有数据都将在一个表中

解释结果:

看起来您的数据库在同一个表中的一列中有多个索引(
pf_prodQtySeq

您应该做的是添加一个组合索引,以便
where
-子句的两个部分都可以从索引中受益。一个表只能使用一个索引,因此必须在同一个索引中包含两列,才能获得更好的性能

alter table pf_prodQtySeq add index prLineSh_planQty (prLineSh, planQty);

您的查询执行良好。但建议排除使用filesort使用temporary
WHERE
子句包括对
pf_prodQtySeq
表的引用。Try强制优化器以第一顺序加入此表,以减少MySQL的额外通过次数(请参见中的
stright\u join
modifier for或
stright\u join
in)。为防止性能降低,请使用
EXPLAIN
监视更改。有关更多信息,请参见。祝你好运

此查询正常运行
。。。不太可能,因为您在使用
分组依据时选择了非聚合列。可能会添加关于查询应该执行的操作的描述。您可以尝试使用
内部连接
,而不是
连接
。使用
解释
来检测提高查询性能的方法。您还可以在问题中显示
EXPLAIN
结果。更改联接类型会使性能更差@sagargangwal添加索引定义。