0

必要な場合を除き、最後のテーブル結合で完全なテーブル スキャンが実行されないように、MySQL クエリを書き直したいと考えています。table1.csv は、table2 の join_id 列に関連するカンマ区切りの ID を含む varchar フィールドです。最初の結合で table2 が table1 に結合されておらず、table1 の csv 列が空の文字列でない場合にのみ、テーブル全体のスキャンを行う FIND_IN_SET を呼び出したいと思います。

SELECT table1.id, table1.csv, GROUP_CONCAT(`unlocked`.join_id)
AS `list` FROM table1 LEFT JOIN table2 ON table1.id=table2.join_id
LEFT JOIN table2 `unlocked` ON table2.join_id IS NULL AND table1.csv<>'' AND
FIND_IN_SET(`unlocked`.join_id, table1.csv) WHERE table1.id IN ([comma separated values])
GROUP BY table1.id
4

0 に答える 0