小编Dmi*_*din的帖子

用于对联合所有结果集执行偏移/限制的算法

我有两个结果集:

rs1:

     id       name
   serial     text
________________
     1        Nick
....................
  1233112     Pete
Run Code Online (Sandbox Code Playgroud)

rs2:

     id       name
   serial     text
________________
  123121      Mike
....................
 221233112   Junior
Run Code Online (Sandbox Code Playgroud)

如果我们写一个查询:

SELECT *
FROM
(

    SELECT *
    FROM rs1

    UNION ALL

    SELECT *
    FROM rs2

) as rs
OFFSET 100000 LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

查询结果是如何计算的?将使用什么算法?

我相信服务器执行惰性评估是指不加载整个联合,对其进行迭代,然后返回所需的结果。

如果您描述了其他 SQL 服务器中使用的算法作为补充,我将很高兴。

UPD:我对数据库内部结构很陌生,不知道是否可以向 sql-server 本身询问查询的执行计划。

这是一个查询计划:

"Limit  (cost=77.11..77.88 rows=10 width=522)"
"  ->  Append  (cost=0.00..140.18 rows=1818 width=522)"
"        ->  Seq Scan on tbl  (cost=0.00..70.09 rows=909 width=522)"
"        ->  Seq Scan on …
Run Code Online (Sandbox Code Playgroud)

postgresql execution-plan database-internals postgresql-9.4

5
推荐指数
1
解决办法
5433
查看次数