複数のテーブルを結合するSQLで、速度を上げるための方法です。 WHWRE句で絞り込みして結合するテーブルを小さくして速度を上げます。
元のSQL
main_table
のユーザとsub_table1
、sub_table2
の作成者create_id
を関連付けてテーブルを結合したいとする。
この時、sub_table1
、sub_table2
が大きいと処理に時間がかかる。
SELECT *
FROM main_table AS main
LEFT JOIN sub_table1 AS st1
ON main.u_id = st1.create_id
LEFT JOIN sub_table2 AS st2
ON main.u_id = st2.create_id
WHERE main.category = 'category' AND create_at >= '20190101';
チューニングしたSQL
予め条件が決まっていて絞り込めるのであれば、結合するテーブルを小さくしておくと処理が早い。
ここでは、sub_table1
はカテゴリ、sub_table2
が日付で条件づけている。
SELECT *
FROM main_table AS main
LEFT JOIN (
-- カテゴリで絞り込み
SELECT * FROM sub_table1 WHERE category = 'category'
) AS st1
ON main.u_id = st1.create_id
LEFT JOIN (
-- 日付で絞り込み
SELECT *FROM sub_table2 WHERE create_at >= '20190101'
) AS st2
ON main.u_id = st2.create_id
WHERE main.category = 'category' AND create_at >= '20190101';
複数のテーブル結合で処理速度を上げる
SQLschedule2019-07-09