暂无图片
面试碰到一个无招胜有招的面试题: 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
王语嫣
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
打赏 0
海潮

正确的分页方式:

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

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

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

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

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

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
麻烦问下各位大佬 在下载oracle补丁时(11.2.0.4.0)一直提示有超集,是必须要下载最新的吗?
回答 2
主要该版本没有oracle锁定就可以下载使用,Oracle只是提醒有更新更好的补丁。
什么是复合类型的变量?
回答 2
已采纳
所谓复合类型变量,就是每个变量包含多个元素,可以存储多个值。复合类型的变量需要先定义,然后才能声明该类型的变量。常用的三种类型包括记录类型、索引表类型和VARRAY数组。
oracle的rac如果做normal冗余的话,实际能用的空间还是一块盘的空间吗?
回答 1
已采纳
是的,看你的冗余级别,asmcmdlsdg看列usablefilemb表示你可用的剩余空间,如果是extern无冗余,则usablefilembfreemb
克隆pdb
回答 1
就是在19里面也没有进度。在命令行执行都没有进度条的。不过你可以看一下原库的目录。在手工对比一下新库的目录大小。估算一下。
rac一个节点hung了30秒,节点2正常
回答 14
可以通过ASH或者AWR确认下同时间物理读有没有受影响如果也有变慢或长时间没有响应的情况基本可以断定为IO相关异常存储、交换机、HBA等
skip inaccessible filesperset 10
回答 5
已采纳
SKIPINACCESSIBLE:表示跳过不可读的文件。FILESPERSET10:&nbsp;表示一个备份集中有多少个文件,这个就是一个备份集有10个文件。
执行sql报错ora00600 -19004版本11.2.0.4实在没研究明白,求大神帮忙!
回答 1
把两个in改成join试试
oracle 两个节点用ctss同步时间,系统时间,时区,硬件时间等都检查过了一致的,但是ctss一直认为有很大误差
回答 1
已采纳
建议先将操作系统的ntp和chrony服务关闭了,再通过crsctlcheckctss命令观察下ctss时间同步时否正常;时间同步好像是毫秒级别缩短时间差异的,正常等几天后时间就同步了;
ORA-60003: adding (string) blocks to table string.string partition string with MAXSIZE (string)
回答 2
主要是如何扩maxsize
Oracle初始化调参文档有吗?
回答 6
每个环境都不一样,还得适应自己环境才行
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~