V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fdgdbr
V2EX  ›  程序员

一个奇怪的 oracle 分页的问题

  •  
  •   fdgdbr · Aug 26, 2021 · 1611 views
    This topic created in 1707 days ago, the information mentioned may be changed or developed.

    有一个表,表名就叫 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 replies    2021-08-27 09:43:39 +08:00
    fdgdbr
        2
    fdgdbr  
    OP
       Aug 27, 2021
    @encounter2017 看了执行计划确实不一样,查第一页的时候是全表扫描的,第二页就走索引了,但是还是不理解为什么会这样
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2786 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:35 · PVG 23:35 · LAX 08:35 · JFK 11:35
    ♥ Do have faith in what you're doing.