Oracle SQLチューニングの基本は実行計画を理解することです。実行計画はツリー構造で、様々なオペレーションから構成されます。
この記事では、SORT ORDER BY オペレーションについて説明します。
SORT ORDER BY オペレーションとはどのようなオペレーションか?
クエリのORDER BY句の指定に基づき、ソート処理を実行するオペレーションです。
前のステップからすべてのデータを受け取り、ソート処理を実行します。データが大量な場合は、一時表領域を使用してソート処理を実行するため、負荷が大きくなります。
実行計画の例と処理イメージ図
SELECT * FROM emp WHERE sal > 4000 ORDER BY sal;
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 38 | 4 (25)| 00:00:01 |
| 1 | SORT ORDER BY | | 1 | 38 | 4 (25)| 00:00:01 |
|* 2 | TABLE ACCESS FULL| EMP | 1 | 38 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
2 - filter("SAL">4000)
SORT ORDER BY オペレーションに関するFAQ
SORT ORDER BY オペレーションが使われる条件には何がありますか?
以下の条件を満たす必要があります。
- クエリでORDER BY句を指定している
SORT ORDER BY オペレーションを使う実行計画は望ましくないですか?
先に説明した通り、データが大量な場合は、一時表領域を使用してソート処理を実行するため、負荷が大きくなります。WHERE句を追加してソート実行前にデータを絞り込めると、負荷を小さくできます。
一時的にSORT_AREA_SIZEを大きく指定して、ソートをメモリ上で処理することで、負荷を軽減することが可能な場合もあります。
索引を使用することで、SORT ORDER BY オペレーションによるソート処理を実行せず、ソートされた結果を得ることができる場合もあります。
もし、ソートされた結果が不要な場合は、ORDER BY句を取り除くのも良い方法です。
SORT ORDER BY オペレーションを使う実行計画に誘導するヒントは何ですか?
クエリでORDER BY句を指定していることにより、SORT ORDER BY オペレーションが使用される形にありますので、特にヒントはありません。
参考情報
キーワード
ソート ORDER BY 一時表領域 SORT_AREA_SIZE