sql >> データベース >  >> RDS >> Mysql

TOPまたはLIMITを使用せずにTOP10行を取得しますか? –今週のインタビュー質問#247

    質問: 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

    1. Oracleで現在開いているカーソルを見つける方法

    2. サーバーやphpMyADMINにアクセスせずにSQLテーブルをエクスポートする簡単な方法

    3. SQL Serverトランザクションログ、パート1:ログの基本

    4. VARRAY内に値が存在するかどうかを確認する方法