从透明表中选择 MAX 值的最有效和最优雅的方法是什么?例如,让我们尝试选择 T100、Messages这样的简单表。让我们假设我们应该在某个应用程序区域内选择最大消息数。我们可以通过多种方式做到这一点。
最明显的是使用MAX
聚合函数
select MAX(msgnr)
from t100
where arbgb = '/ASU/GENERAL'
另一个是 usingUP TO 1 ROWS
子句
select msgnr
from t100
where arbgb = '/ASU/GENERAL'
and ROWNUM = 1
order by msgnr DESC
在上面,所有 SQL 语句都在本地 Oracle SQL 中给出,因为我在 DBACOCKPIT 中进行测试,这是强制性的。
内置的驾驶舱工具对两个请求显示几乎相同的结果:
- 它们的估计成本都是 3,但是,第二个查询在计划中只有 2 个步骤,而第一个查询有 3 个。
- 第一个查询的估计 CPU 成本为每步21.564 ,但第二个查询的总成本为 21.964。
所以我们可以得出结论,第二种变体在这里更有效。
但是,这会是普通情况下的重点吗?这个结果在不同的数据库上会有所不同,还是我们可以将其视为经验法则?