私は3つの異なるテーブルから来るデータを持っており、それらの間で条件付き選択をする必要があります。MySQLマルチテーブル参加
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;
EDIT:コードでもORDERとLIMIT句は、LIMITダウン10秒にクエリの実行速度を回動する本であるが、LIMITクエリが1未満秒程度かかりずに次のようにDBクエリがあります。 LIMITingを最適化する方法
このクエリは正常に機能しますが、実行には時間がかかります。このクエリには約5秒かかりますが、各テーブルは50,000行未満です。また、2倍の速度で、より多くのRAMサーバーを試しました。同じ時間。テーブルのインデックスが作成されます。 高速化のためにクエリと関連があるのですか、テーブルを統合する必要があります。つまり、すべてのデータが1つのテーブルに格納されます。あなたが同じテーブルの上に1列(pf_prodQtySeq
)のためのいくつかのインデックスをそれぞれ持っているように見えます
'このクエリは正常に動作します。 '...実際には、GROUP BYを使用している間に非集計カラムを選択しているためです。クエリーが何をすべきかについての記述を追加するかもしれない。 –
'join'の代わりに' inner join'を試すことができます。 –
クエリのパフォーマンス向上の方法を検出するには、 'EXPLAIN'を使用します。また、あなたの質問に 'EXPLAIN'の結果を表示することができます。 – Alexander