web-dev-qa-db-ja.com

句による注文はパフォーマンスに悪影響を及ぼしますか?

グーグルで答えが見つかりませんでした。

上級開発者からジュニア開発者に、order by句を使用するとパフォーマンスに悪影響があり、彼はそれを使用すべきではないと言っているのを聞いただけです(Oracle)。

どのような状況でOrder by節がパフォーマンスに悪影響を与える可能性がありますか?

更新

私は ORDER BY句によるSQLクエリの悪いパフォーマンス を見つけました。 order by句がパフォーマンスに悪影響を与える可能性のある他の状況はありますか?

6
Ascendant

ORDER BY句は、データを順番に取得するために使用できるインデックスがない場合、常にソート操作を追加します。より大きなデータセットの場合、ソートされるデータはディスクに書き込まれ、追加の処理が追加されます。インデックスが使用されている小さな結果セットの場合、並べ替え手順は必要ない場合があります。

ソートが必要な場合、データベースはすべてのソートキーデータを取得し、結果を表示する前にソートする必要があります。これにより、最初の行の可用性が遅れることがあります。大きなセットの最初の数行のみが必要な場合は、データベースに多くの追加作業が発生する可能性があります。

言われているより、ORDER BY句がパフォーマンスに大きな影響を与えることはほとんどありません。開発者がソートされていない結果セットを取得してクライアントでソートすることによってパフォーマンスを向上させようとしたが、うまく機能しなかった1つのケースを思い出します。

特定の順序でデータを表示する必要がない限り、ORDER BY句は使用しません。特定の順序でデータを表示する必要がある場合は、ORDER BY句を使用します。パフォーマンスについて質問がある場合は、代替案をテストする前に、運用データベースに対してクエリをテストします。

8
BillThor

クエリと結果セットのサイズによって異なります。ソートがメモリ内で実行できる場合、それでも「高速」です。しかし、メモリに対して大きすぎる場合、Oracleは結果をTEMPテーブルスペースに書き込み、これはさらに悪くなる可能性があります。 TEMP TSをSDD /フラッシュディスクに置くと、ソートのパフォーマンスが向上します。

2
J. Doe

ORDER BY大きなテーブルではパフォーマンスが非常に低下する可能性があります。可能な限り最小のデータセットにORDER BY句を適用してみてください。理論的には、オプティマイザはORDER BYを実行する最良の方法を選択するのに適しているため、パフォーマンスに大きな影響はありませんが、非常に重いですパフォーマンスに大きな影響を与えるORDER BY句を見た環境。たとえば、11のテーブルから選択し、数百万のレコードを返すビューの場合、このビューからの選択にORDER BYを追加すると、10倍待機し、実行プランのコストが増加します。システムにメモリがあり、ORDER BYの適用が重くなると、別の問題が発生する可能性があります。

1
alonk