前提
- mysqlでの話。
Subjects --(1:n)-+ Subjects_Tags +-(n:1)-- Tags
というテーブル構造での話。
本題
趣味の範疇なのだろうけれども、レコード数が増加する方向のJOINは極力控えたい。
Select * from Subjects left join Subjects_Tags ...
より、Select * from Subjects_Tags left join Subjects
の方が好み。
「行を増やすこと自体にコスト多少コストがかかる」感覚を持っている。 オプティマイザがよしなにやってくれるはずなんだろうけどね。
具体的には
SELECT S.name, T.name AS tag_name FROM Subjects AS S LEFT JOIN Subjects_Tags AS S_T ON S.id = S_T.subject_id LEFT JOIN Tags AS T ON S_T.tag_id = Tags.id WHERE S_T.subject_id = :id ;
よりも
SELECT S.name, T.name AS tag_name FROM Subjects_Tags AS S_T LEFT JOIN Subjects AS S ON S_T.subject_id = S.id LEFT JOIN Tags ON S_T.tag_id = Tags.id WHERE S_T.subject_id = :id ;
の方が好み。