gc00001 2013-05-08 10: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 10:55
    关注

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

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

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

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

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献