透明なテーブルから最大値を選択する最も効率的でエレガントな方法は何ですか? たとえば、 T100, Messagesなどの単純なテーブルを選択してみましょう。あるアプリケーション領域内で最大メッセージ数を選択する必要があると想像してください。これは複数の方法で行うことができます。
最も明白なのは、MAX
集計関数を使用することです
select MAX(msgnr)
from t100
where arbgb = '/ASU/GENERAL'
そしてもう1つはUP TO 1 ROWS
節を使用しています
select msgnr
from t100
where arbgb = '/ASU/GENERAL'
and ROWNUM = 1
order by msgnr DESC
上記では、すべての SQL ステートメントがネイティブの Oracle SQL で提供されています。これは、これが必須である DBACOCKPIT でテストを行っていたためです。
組み込みのコックピット ツールは、両方の要求に対してほぼ同じ結果を示しました。
- 両方の推定コストは 3 ですが、最初のクエリには 3 つのステップがあるのに対し、2 つ目のクエリには 2 つのステップしかありません。
- 最初のクエリの推定 CPU コストはステップあたり21.564 ですが、2 番目のクエリの合計コストは 21.964 です。
したがって、ここでは 2 番目のバリアントの方が効率的であると結論付けることができます。
しかし、これは一般的な場合のポイントでしょうか? この結果は DB によって異なるのでしょうか、それとも経験則として扱うことができますか?