一个奇怪的 oracle 分页的问题

2021-08-26 18:06:36 +08:00
 fdgdbr

有一个表,表名就叫 test_table 好了,数据量 600 多万,分页查询,我在代码里面执行 sql,sql 语句如下:

select a.* from ( select t.*,rownum rowno from test_table t where column1 = 'abc' and rownum < 11 ) a where a.rowno >= 1;

其中 column1 已经加了索引,不分页的情况下满足条件的数据量有 20 万条,然后发现查第一页的时候很慢,要 2 分钟,但是查询第二页就很快了,不到 1 秒钟,我把 sql 原样复制到 PL/SQL developer 里面执行,结果是一样的,还是第一页很慢,第二页很快。

这是第一个不理解的点

然后我想到 PL/SQL developer 在执行 sql 的时候默认就会分页显示,所以我就把上面 sql 里面 rownum 的条件去掉了,也就是我在 PL/SQL developer 里面执行下面的 sql:

select * from test_table where column1 = 'abc';

查询会返回大概 10 来条数据,但是很快了,这是第二个不理解的点,PL/SQL developer 底层去执行分页查询的时候到底是执行了怎么样的一句 sql

1131 次点击
所在节点    程序员
2 条回复
encounter2017
2021-08-26 18:56:13 +08:00
fdgdbr
2021-08-27 09:43:39 +08:00
@encounter2017 看了执行计划确实不一样,查第一页的时候是全表扫描的,第二页就走索引了,但是还是不理解为什么会这样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/798194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX