によって誘致this article私はデータベースからメンバーリストのエクスポート機能を最適化しようとしました。複数のテーブルの結合?
元のクエリは次のようになります。
-- First query
SELECT
*
FROM
members_customer_id_0000000169
WHERE
deleted = '0000-00-00 00:00:00'
-- Second query run for every result from first query
SELECT
stores.external_store_id AS local_store_id
FROM
regions,
stores,
stores_reference_members_customer_id_0000000169
WHERE
regions.customer_id = 169
AND
stores.region_id = regions.id
AND
stores_reference_members_customer_id_0000000169.member_id =' . $result['id'] . '
AND
stores_reference_members_customer_id_0000000169.store_id = stores.id
を最初のクエリは、180Kの行を返し、その性能は、2番目のクエリはすべて180K回のフェッチ効率的ではありません。
私の代わりにこれをやってみました:
SELECT
members_customer_id_0000000169.*,
stores.external_store_id AS local_store_id
FROM
members_customer_id_0000000169
LEFT JOIN
stores_reference_members_customer_id_0000000169
ON
stores_reference_members_customer_id_0000000169.member_id = members_customer_id_0000000169.id
JOIN
regions
JOIN
stores
WHERE
members_customer_id_0000000169.deleted = '0000-00-00 00:00:00'
AND
regions.customer_id = 169
AND
stores.region_id = regions.id
AND
stores_reference_members_customer_id_0000000169.store_id = stores.id
結果は唯一の140K行です。その理由はおそらく私が意図した通りにlocal_store_id
のないメンバーを取得しないということです。 そして私は問題が何であるか確信しています。
私は私があるため、多くのテーブルと句の加入が、私は唯一のLEFT/RIGHT 2つのテーブル間の結合を行うと経験を持っていると間違って何かをやっていることを確信しています。
誰でも問題を特定できますか?
「LEFT JOIN」を「LEFT OUTER JOIN」に変更すると、同じ結果が得られます。 WHERE句を結合に移動することは不可能です。少なくとも、これをどうすればよいのか分かりません。 – Repox
最後に、WHERE句を継承に移動して、代わりに必要な結果を得ました。ありがとうございました。 – Repox