n+1問題?

http://dev.ariel-networks.com/articles/workshop/rails-activerecord/
1:Nの関係のtableが持つオブジェクトを列挙しようとしたとき、ナイーブに書くと1+N回のsqlが実行されてしまうと言う問題らしい。
eager loadingなどで解決するらしい。

model.search_query(...) # modelのobjectが返ってくる

このようにDB検索の始点となるオブジェクト(のモデル)と、検索結果のオブジェクトが等しい関係に無いので。
AがBを持ち、Bの内容全てを列挙したいような場合など複数のモデルのオブジェクトを期待している時に、不用意にsqlが実行されてしまう。

for a in A.search_query():
    a.b.name #ここで対応するBを検索するsqlが実行

django等では、select_relatedで頑張る。

sqlalchemyではあまり困らない

qs = Session.query(A,B,C).filter(A.id == B.a_id).filter(B.id == c.b_id)
for a,b,c in qs:
    ...

このようにSession.queryに渡したモデルが検索結果の内容に、対応したイテレータが返ってくれるので、イテレータの各要素に複数のオブジェクトのタプルにすることができる。