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

ResultSet.nextは、クエリにFIRST_ROWSまたはROWNUM制限が含まれている場合にのみ非常に遅くなります

    ヒントを含めると、異なるクエリプランが得られますか?私の仮定は、あなたが問題の説明に基づいて行うことです。

    Oracleでクエリを実行する場合、データベースは通常、どの時点でも結果セット全体を実体化しません(明らかに、ORDER BYを指定した場合は実体化する必要があります。 ソートが発生する前にすべてのデータを実体化する必要がある句)。 Oracleは、クライアントがデータのフェッチを開始するまで、実際にはデータの実体化を開始しません。クライアントがフェッチを要求した行数(この場合は10のように聞こえます)を生成するのに十分なクエリを実行し、それらの結果をクライアントに返し、クライアントが追加のデータを要求するのを待ってから処理を続行します。クエリ。

    FIRST_ROWS ヒントが含まれていると、クエリプランが変更され、実行コストが高くなります。明らかに、それはFIRST_ROWSの目標ではありません ヒント。目標は、クエリからのすべての行のフェッチの効率が低下した場合でも、最初のN行のフェッチをより効率的にするプランを生成するようにオプティマイザーに指示することです。これにより、オプティマイザは、テーブルスキャンが全体的に効率的である可能性があるテーブルスキャンよりもインデックススキャンなどを優先する傾向があります。あなたの場合のように聞こえますが、オプティマイザーの見積もりは正しくなく、一般的に効率の悪いプランを選択することになります。これは、クエリが参照している一部のオブジェクトの統計の一部が不完全または不正確であることを意味することがよくあります。



    1. 製品レビュー–MySQLのステラ修復

    2. ボレーを使用してPDFをアップロードしますが、サーバーフォルダーにnullファイルを取得します

    3. Grails3-Gradleの依存関係Mysqlコネクタ

    4. カウントにギャップを残してプライマリを自動インクリメント