クエリステートメントに日付ascまたはdescで注文した理由を、誰かが親切に説明してくれませんか。パフォーマンスが大幅に低下しますか?
通常、ステートメントは次のようになります
select * from table where ... order by modified_data asc
この問題を軽減するための最良の方法は何ですか?日付で注文を削除した瞬間、パフォーマンスが大幅に向上します。
クエリステートメントに日付ascまたはdescで注文した理由を、誰かが親切に説明してくれませんか。パフォーマンスが大幅に低下しますか?
通常、ステートメントは次のようになります
select * from table where ... order by modified_data asc
この問題を軽減するための最良の方法は何ですか?日付で注文を削除した瞬間、パフォーマンスが大幅に向上します。
これは、クエリプラン、modified_date
インデックス付けされているかどうか、および他にどのような述語があるかによって異なります。ただし、一般に、を追加するにORDER BY
は、Oracleが結果を返す前に結果をソートする必要があります。そのため、通常、Oracleは、行を返す前に結果セットを完全に実体化する必要があります。最後の行を返すのに必要な時間ではなく、最初の行を返すのに必要な時間を測定している場合は、効果が大きくなります。
これは、一般的に軽減する問題ではありません。並べ替えられた結果セットが必要な場合は、その結果セットを並べ替えるオーバーヘッドが発生します。そうでなければ、あなたはしません。特定のケースでは、Oracleが結果を物理的にソートするのではなく、ソートされた順序で結果をフェッチできるようにするインデックスを追加できる場合があります。しかし、それはあなたが言及していない非常にクエリ固有の要因のホストに依存します。
特に結果セット全体を最初に作成する必要があり、その後にのみ並べ替えを開始できるため、並べ替えには時間がかかります。フィールドmodified_data
にインデックスが付けられる場合は、そうではありません。
テーブルのIDにインデックスを作成してみてください。また、すべての列が必要ない場合は、select列のselect*を変更します。