我知道 SQL 只能像这样返回一定数量的行:
数据库:
select ... order by num desc limit 10
甲骨文数据库:
WHERE ROWNUM <= 10 and whatever_else
但我的印象是,这些执行是通过查找满足您的“where”条件的所有条目然后仅返回其中的一个子集来执行的。
我想告诉它,“给我你遇到的前 N 个满足我条件的条目并停止执行”,这样如果我只想要数据库中某些数据的示例,我的查询将执行得非常快而不是全部。
有谁知道如何在 MySQL 和/或 Oracle SQL 中执行此操作?首选 Oracle SQL,但如有任何帮助,我们将不胜感激。
另外,正确的说法是什么? “短路”一词描述了我正在寻找的内容,但我不确定它是否是关于数据库的官方术语。
最佳答案
一个简单的 select ... where ... limit ...
将在找到必要的项目后停止处理,此优化内置于 mysql 和其他引擎中。
一种常见的优化技术是在您知道只有一个匹配项时LIMIT 1
,这可以防止数据库进行全面扫描。
但是,当您包含 ... order by ...
时,引擎别无选择,只能遍历所有项目以找到正确的元素。即使如此,也有关于不限制的优化,在您的示例中,数据库引擎可能只保留 10 个项目的列表,并在找到应在其上方排序的元素时弹出项目。
关于mysql - 短路 SQL 以返回找到的第一个 X 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380778/