一对多关系的数据,比如订单和订单商品,要一起显示订单和其商品信息,怎么样查询最优就像淘宝一样,每个订单(order表)对应多个商品(order_item表)时,查询订单信息必须把该订单的商品主要信息也显示出来。这个就是我们常说的一对多关系数据。
而查询时是按订单数据行分页查询,在hibernate或ibatis中都可以采用一对多关联查询查询得到结果,但都会产生N+1问题,且这个也不存在延时加载,因为一打开页面就要把订单数据和其订单商品数据都显示。
这是互联网应用,订单和商品数据量都很大,且数据都在不断递增中。
我系统现在是用ibatis的,本来这种情况是准备把order表和order_item表连接,然后用resultMap的groupby处理的,
但因为我系统中没有采用ibatis的分页PaginatedList,是自己组装sql 实现limit分页的,若采用resultMap的groupby查询,分页查询其实是对order和order_item的连接查询结果分页,不是按订单数分页查询的。
有类似产品开发经验的来说说如何处理的,大家都可以发表发表意见,共同学习。

解决方案 »

  1.   

    订单<-->关系表<-->商品表定期维护关系表。K,V(,,,,,,)--一个订单永远是ONE-TO-ONE一般一个订单一个商品的概率是>50%自己掂量着办。
      

  2.   


    不好意思,【定期维护关系表。K,V(,,,,,,)--一个订单永远是ONE-TO-ONE 】,这个没有太明白,可否说细点,关系表中就是订单主键和商品主键两字段吗,那样也不是one-to-one
      

  3.   

    是的,我现在不用ibatis的PaginatedList分页。是自己物理分页查询。但是一对多数据有个N+1问题,所以我想知道如何设计能达到最优查询性能
      

  4.   

    那就自己写关联查询的sql语句咯
      

  5.   


    问题之一是:关联两表(order,order_item)分页查询的结果集是对笛卡尔积的结果集分页查询,而真实的分页应该是对order表的分页