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

OracleにSKIPLOCKEDでTOPN行を返すように強制します

    「私が見たところ、Oracleはスキップする行を決定する前にWHERE述語を適用します。」

    うん。それが唯一の可能な方法です。結果セットを決定するまで、結果セットから行をスキップすることはできません。

    答えは、SELECTステートメントによって返される行数を制限しないことです。 FIRST_ROWS_nヒントを使用して、完全なデータセットを取得しないようにオプティマイザーに指示することもできます。

    SELECTを呼び出すソフトウェアは、最初のn行のみを選択する必要があります。 PL / SQLでは、次のようになります

    DECLARE
      CURSOR c_1 IS  
        SELECT /*+FIRST_ROWS_1*/ qt.ID
        FROM QueueTest qt
        WHERE Locked IS NULL
        ORDER BY PRIORITY
        FOR UPDATE SKIP LOCKED;
    BEGIN
      OPEN c_1;
      FETCH c_1 into ....
      IF c_1%FOUND THEN
         ...
      END IF;
      CLOSE c_1;
    END;
    


    1. SQL Serverのパフォーマンス—クラウドでのテスト

    2. MySQLでの削除後の自動インクリメント

    3. PostgreSQL自動インクリメント

    4. 'COLLATE SQL_Latin1_General_CP1_CI_AS'は何をしますか?