今天在做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
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 CSS实现渐隐虚线边框
- ¥15 thinkphp6配合social login单点登录问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题