dbtab

时间:2016-04-22 14:13:48

标签: sap abap opensql

从透明表中选择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中进行测试,这是强制性的。

内置驾驶舱工具显示两个请求的结果几乎相同:

  • 估算成本对于他们两个都是3,但是,第二个查询在计划中只有2个步骤,而第一个有3个步骤。
  • 第一个查询的
  • 估算的CPU费用为每步 21.564 ,但第二次费用为21.964。

因此,我们可以得出结论,第二种变体在这里效率更高。
但是,这是一个常见的情况吗?这个结果会在不同的DB上有所不同,或者我们可以将其视为经验法则吗?

1 个答案:

答案 0 :(得分:4)

性能测量总是根据一组相当大的参数而变化,DBMS并不是最不重要的。例如,某些DBMS可能能够使用索引来有效地确定MAX(...)语句,而其他DBMS可能不得不求助于某种更低效的形式。此外,不要相信优化程序的预测 - 衡量实际效果。优化器可能由于多种原因而出错(据我所知,过时的统计数据和破碎的索引是最常见的),如果优化程序估计总成本为12.345,则效果不大如果实际成本为987.654。因此,我的建议是

  • 仅选择您需要的内容(避免SELECT *,明智地使用WHERE
  • 衡量,衡量,衡量
  • 要警惕大多数未经证实和声称的表现规则。