You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WHERE ROWNUM = 1时Oracle数据库是否仍会执行全表扫描?

Oracle中ROWNUM=1的执行逻辑

在Microsoft SQL Server中,我们可以用以下语句返回匹配条件的首行:

SELECT TOP 1 * FROM MYTABLE WHERE NAME LIKE '%next%'

在Oracle数据库中,实现相同效果的写法是:

SELECT * FROM MYTABLE WHERE NAME LIKE '%next%' AND ROWNUM = 1

针对你的问题,答案是肯定的:

  • Oracle优化器会识别到ROWNUM = 1的需求,在找到第一条满足NAME LIKE '%next%'条件的记录后立即停止扫描,不会遍历整张表。
  • 这本质上就是短路求值机制的体现:ROWNUM是Oracle为符合WHERE子句前置条件的行逐行分配的序号,只有当行通过了NAME LIKE '%next%'的过滤后,才会被考虑是否满足ROWNUM = 1。一旦有一行同时满足两个条件,查询就会终止并返回结果。
  • 额外说明:如果查询能利用到合适的索引(比如NAME字段上的全文索引或普通索引,视LIKE模式而定),优化器会优先走索引扫描,更快定位到第一条匹配记录;即使是全表扫描,也会在找到目标行后立即停止。

内容的提问来源于stack exchange,提问作者user3163495

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:25:59