質問: TOPまたはLIMITを使用せずにTOP10行を取得しますか?
回答: 最近の包括的なデータベースパフォーマンスヘルスチェックでこの質問をされたとき 、私はその人に、なぜ彼が車輪の再発明をしたいのかを尋ねました。しかし、彼の答えを受け取ったとき、私は実際にその理由に本当に同意しました。
理由は次のとおりです。TOPまたはLIMITは、実際にはANSI実装ではないため、使用しません。 SQL Server、MySQL、MariaDB、PostgreSQLなどのさまざまなデータベースで機能するように最上位の行を取得したいと考えています。
すべてのデータベースは、最上位の行を取得するための独自のロジックを実装しています。 SQLServerはTOPを使用します MySQL、MariaDB、およびPostgreSQLは LIMITを使用します。 SQLServerの行を制限するキーワード。これは、任意のRDBMSにプラグインできるコードを作成しているサードパーティベンダーに固有の課題を提示します。彼らはコードウィッチ条件を記述し、ロジックの2つの異なるバージョンを維持する必要があります。ただし、次の方法を使用すると、リレーショナルデータベースの最近のすべてのバージョンで機能します。
SELECT ROUTINE_SCHEMA、ROUTINE_NAME、ROUTINE_DEFINITIONFROM(SELECT ROUTINE_SCHEMA、ROUTINE_NAME、ROUTINE_DEFINITION、ROW_NUMBER()OVER(ORDER BY ROUTINE_NAME)AS ROWNUMFROM INFORMATION_SCHEMA.ROUTINESWHERE ROUTINE_TYPE ='PROCEDURE')TWこれは、私が遭遇したすべての既知のリレーショナルデータベースで機能します。 TOPとLIMITを使用するのが大好きですが、複数のリレーショナルデータベースで機能するロジックを引き続き使用することをお勧めします。
ここにあなたが面白いと思うかもしれない他のブログ投稿があります:
- SQL SERVER –SSMS18以降でPriorityBoostServer構成オプションをオフにする
- SQL SERVER –RowCountを使用してインデックスの断片化をチェックするサンプルスクリプト
- SQLパズル–スキーマとテーブルの作成–コードを実行せずに答える
- クエリでインデックスが強制されているかどうかを知る方法は? –今週のインタビュー質問#246