我有两个结果集:
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)