特定の数の行のみを選択する方が、より具体的な選択ステートメントを作成するよりも優れている場合はよくわかりません。かなり単純なものが欠けているような気がしますが、わかりません。私はSQLの経験が6か月未満で、大雑把だったので、これが本当に単純な質問である場合は申し訳ありませんが、明確な答えが見つかりませんでした.
7 に答える
私は2つの一般的な用途を知っています:
ページング : 順序を指定してください。順序が指定されていない場合、多くの db 実装は、クエリの実行に便利なものを使用します。この「最適な」順序付け動作は、非常に予測不可能な結果をもたらす可能性があります。
SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID
サブクエリ : サブクエリを発行できる多くの場所では、結果が単一の値である必要があります。多くの場合、top 1 は max よりも高速です。
--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
SELECT top 1 CustomerID
FROM Orders
WHERE OrderDate = @Today
)
通常、カスタム ページング。
このステートメントを使用する理由は次のとおりです。
DB からクライアントにすべての行を転送することなく、最も関連性の高い結果 (トップ 100 など) のみを表示します。この場合、ORDER BY も使用します。
一致する行があるかどうかを知りたいだけで、いくつかの例があります。この場合、結果を順序付けしません。繰り返しになりますが、FETCH FIRST は、DB に大量の行を転送する準備をさせてからクライアントで破棄するよりもはるかに安価です。これは通常、特定の SQL が正しいかどうかを把握する必要があるソフトウェア開発中に行われます。
ユーザーに値を表示する場合、必要な行数は N 行だけです。通常、データベース サーバーは最初の N 行をフェッチできますが、すべての行をフェッチするよりも高速です。そのため、画面の再描画は少し速くなります。
Oracle には FIRST_ROWS と呼ばれるヒントさえあります。これは、すべてのデータを効率的に戻すことよりも、データを迅速に戻すことが重要であることを示唆しています。
SQL の設計者はあなたに同意します。これが、標準 SQL に top/limit/fetch first などが含まれていない理由です。
Google の検索結果と、検索結果の通常のページ数を考えてみてください。
明らかに、彼らの場合にはもっと多くのことがありますが、それがアイデアです.
ページングは別として、テーブルから最大または最小の [メトリックをここに挿入] 行が必要な場合はいつでも、[任意のメトリック] で順序付けし、1 行に制限することは、MIN/MAX を使用してサブクエリを実行するよりも優れています。エンジンによって異なる場合があります。