暂无图片
面试碰到一个无招胜有招的面试题: oracle有一张1亿数据量的表, 怎么快速高速的分页? 他想得到的满意答案到底怎么样的 求教?
我来答
分享
王语嫣
2021-07-19
面试碰到一个无招胜有招的面试题: oracle有一张1亿数据量的表, 怎么快速高速的分页? 他想得到的满意答案到底怎么样的 求教?

面试碰到一个无招胜有招的面试题: oracle有一张1亿数据量的表, 怎么快速高速的分页?
我答: 在select里面先不要放业务字段, 查主键再用主键回表in查询.
面试官: 还有吗?
我答: 1亿了怎么也要考虑分表了.
面试官: 不考虑分表
我答: 据我所知只能到这里了…
面试官: 那我们换个分布式的话题…

他想得到的满意答案到底怎么样的 求教?

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
薛晓刚

一亿条是不要分表的。我以前100亿都是一个表。
传统的做法
SELECT * FROM (SELECT XXX,ROWNUM RN FROM (SELECT * FROM t) A WHERE ROWNUM <= 40)WHERE RN >= 21;

但是新版本12c以后
SELECT * from users where userid like ‘T11%’ offset 20 rows fetch next 20 row only
这种语法就分页了。

前面的where条件你自己写,一定要看看执行计划,确保用到了索引。

暂无图片 评论
暂无图片 有用 2
王语嫣
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
海潮

正确的分页方式:

select * from (select * from (select a.*, rownum rn from (select * from tab1 order by id) a) where rownum <= 10) where rn >= 1

暂无图片 评论
暂无图片 有用 0
刘晨

如果不需要精确,可考虑sample block?

暂无图片 评论
暂无图片 有用 0
老紫竹

不考虑分表,那可以考虑分区。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏