【问题标题】:execution plan for fetch first rows only仅获取第一行的执行计划
【发布时间】:2021-02-14 00:55:48
【问题描述】:

我有一个关于获取前 x 行的问题。此函数是在表中所有行的所有连接都完成后执行,还是在达到数字时立即返回结果? 例如: 表 a 有 100k 行 表 b 有 72k 行

查询是一个内部连接 ​​b 获取前 1000 行。

它会在加入后达到 1000 行后立即显示结果,还是在只显示部分结果之前加入所有行?

【问题讨论】:

  • 你不能用EXPLAIN PLAN自己回答这个问题吗?
  • 它使用分析函数来窗口化结果...查看执行计划

标签: sql oracle optimization top-n sql-limit


【解决方案1】:

如果没有执行计划,真的不可能回答任何细节。

我认为要回答您问题的核心,优化器会尝试提前结束。是否可以在不读取结果集中每一行的情况下执行此操作取决于您的查询。

select id from mytable fetch first 1000 rows only

可能会给您来自mytable 的 1000 行,没有特定的顺序,也不会选择哪些行。

select id, col1 from mytable order by col1 fetch first 1000 rows only 

优化器是否必须进行全表扫描并触摸每一行将取决于。 col1 上有索引吗?如果是这样,它可能能够扫描并仅获取前 1000 行并停止。

【讨论】:

  • 谢谢这个解释澄清了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多