MySQL多表联接
我有来自3个不同表的数据,我需要在它们之间做一些条件选择。DB查询如下:MySQL多表联接,mysql,Mysql,我有来自3个不同表的数据,我需要在它们之间做一些条件选择。DB查询如下: SELECT proddb.onrrnr, proddb.onr AS tellimus, proddb.idnr AS ID, proddb.prod AS toode, proddb.proddate, CASE WHEN
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添加索引定义。