gc00001 2013-05-08 02:17
浏览 222
已采纳

关于hibernate分页的效率问题

今天在做hibernate分页的时候有个人在看到我后台报的sql语句时跟我说这个是假分页,sql语句是这样的select * from (select row_.*,rownum rownum_ from (select t.* from user_view t) row_) where rownum_ <= 20 and rownum_ > 10,他跟我说首先执行了里面的语句查询出了所有的东西然后在执行了外面的语句,然后他说真分页应该是这样的select * from (select rownum rn,a.name from user_view a where rownum <=20) t where t.rn >= 10,然后他把这两条语句放到plsql的sql执行窗口里面执行了解释计划,跟我说第一条语句的基数是表里所有的记录数,第二条语句的基数是20,这说明了计算机在执行第一条语句的时候是先查出了所有的东西。但是我执行了这两条语句其实耗时是差不多的,但是他说在本机的查询看不出效率的差别,要连外部的数据库查询才能看出效率差别,我想全世界那么多人在用hibernate真分页,不会都被忽悠了吧,我该怎么反驳这个事情。我上传了截图

  • 写回答

4条回答 默认 最新

  • classtag 2013-05-08 02:55
    关注

    1.肯定一下,那个告诉你是假分页的人是正确的,通过你打印的SQL应该是假分页。因为在内层已经查询了全部select t.* from user_view t 这个地方没有分页。正确的写法是那个人告诉你的写法。

    2.效率问题是因为你的基数不够大,可以尝试下数据库单表100W数据量,然后你在对比下两个SQL的效率,答案是肯定的。第二个效率肯定高。

    3.hibernate对各种数据库方言分页的写法可以参看:http://my-corner.iteye.com/blog/721903

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部