巨大なログテーブルがあり、その時点で何が起こっているかを知るために最後の X 行を確認する必要がある場合を知っていますか?
通常、次のことができます。
select top 100 *
from log_table
order by ID desc
最新の 100 レコードを表示しますが、逆の順序で表示されます (もちろん、DESC による順序のため)。たとえば、次のようになります。
100010
100009
100008
and so on..
しかし、簡単にするために、記録を発生順に見てみたいと思います。次のクエリを実行することでそれを行うことができます。
select *
from(
select top 100 * from log_table order by ID desc
) a
order by a.id
ここで、ID desc で上位 100 の注文を取得し、結果セットを反転します。動作しますが、この結果を生成するために 2 選択を実行する必要はないようです。
私の質問は次のとおりです。誰かがそれを行うためのより良いアイデアを持っていますか? テーブルの端にあるセレクトトップのような?
編集: 両方のクエリの実行計画: アレックスのアイデアは非常に優れているようですが、デビッドも正しかったです。1 つの選択と 1 つの並べ替えしかありません。
EDIT2: 統計の設定 IO ON:
(10 row(s) affected)
Table 'sysdtslog90'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 12, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)
(10 row(s) affected)
Table 'sysdtslog90'. Scan count 2, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 12, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)