O/R Mapping中的n+1 select 问题

假设对象A关联对象B,对应地, 表a 关联 表b(表b 外键参考 表a)

现在我们要把所有A和其对应的B 从数据库中翻出来

如果不用O/R Mapping,直接用SQL,则可以写一条连接两表的SELECT语句搞定

   

    select * from a join b on b.aId = a. aId

如果用O/R Mapping,实际生成的SQL可能是

 

     select * from a   (假设取出的a的ID分别是 1,2…n)

       select * from b where b.aId =  1

       select * from b where b.aId =  2

       ……

       select * from b where b.aId =  n

  

一共需要执行 n+1 条语句!

当然也不是所有的O/R Mapping框架中都有这个问题。比如Hibernate就可以通过HQL来避免 

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.