从透明表中选择MAX值的最有效和最优雅的方法是什么?
例如,让我们尝试选择T100,消息等简单表格。让我们假设我们应该在某个应用领域中选择最大的消息号。
我们可以通过多种方式实现这一目标。
最明显的是使用MAX
聚合函数
select MAX(msgnr)
from t100
where arbgb = '/ASU/GENERAL'
另一个是使用UP TO 1 ROWS
子句
select msgnr
from t100
where arbgb = '/ASU/GENERAL'
and ROWNUM = 1
order by msgnr DESC
在上文中,所有SQL语句都是在本机Oracle SQL中给出的,因为我在DBACOCKPIT中进行测试,这是强制性的。
内置驾驶舱工具显示两个请求的结果几乎相同:
因此,我们可以得出结论,第二种变体在这里效率更高。
但是,这是一个常见的情况吗?这个结果会在不同的DB上有所不同,或者我们可以将其视为经验法则吗?
答案 0 :(得分:4)
性能测量总是根据一组相当大的参数而变化,DBMS并不是最不重要的。例如,某些DBMS可能能够使用索引来有效地确定MAX(...)
语句,而其他DBMS可能不得不求助于某种更低效的形式。此外,不要相信优化程序的预测 - 衡量实际效果。优化器可能由于多种原因而出错(据我所知,过时的统计数据和破碎的索引是最常见的),如果优化程序估计总成本为12.345,则效果不大如果实际成本为987.654。因此,我的建议是
SELECT *
,明智地使用WHERE
)