假设对象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来避免.
现在我们要把所有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来避免.
本文探讨了对象关系映射(ORM)在处理关联对象查询时可能产生的效率问题,并对比了直接使用SQL进行联合查询的方法。通过具体例子展示了在不同场景下,如何选择更高效的查询方式。
812

被折叠的 条评论
为什么被折叠?



