在 Microsoft SQL Server 中,我们可以使用以下查询返回符合条件的第一行:
SELECT TOP 1 * FROM MYTABLE WHERE NAME LIKE '%next%'
在Oracle数据库中,我们可以使用WHERE ROWNUM = 1
子句来实现同样的事情:
SELECT * FROM MYTABLE WHERE NAME LIKE '%next%' AND ROWNUM = 1
我的问题是,Oracle数据库是否足够聪明,可以在找到符合条件的第一条记录后停止扫描表?
基本上,我可以确信 Oracle 在使用 ROWNUM 时采用某种短路评估吗?
最简单的事情就是生成一个查询并查看。
给定样本数据:
然后:
可能输出:
并且,如果您查看
EXPLAIN PLAN
查询:那么输出是:
所以你的问题的答案是:
是的,达到要求的数量就会停止。
如果您有其他查询,您对行为可能是什么感到困惑,那么生成一个
EXPLAIN PLAN
并查看数据库实际将使用什么。小提琴