V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fdgdbr
V2EX  ›  程序员

一个奇怪的 oracle 分页的问题

  •  
  •   fdgdbr · 2021-08-26 18:06:36 +08:00 · 1237 次点击
    这是一个创建于 1183 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个表,表名就叫 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

    2 条回复    2021-08-27 09:43:39 +08:00
    encounter2017
        1
    encounter2017  
       2021-08-26 18:56:13 +08:00
    fdgdbr
        2
    fdgdbr  
    OP
       2021-08-27 09:43:39 +08:00
    @encounter2017 看了执行计划确实不一样,查第一页的时候是全表扫描的,第二页就走索引了,但是还是不理解为什么会这样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.