1.実行計画の見方
2.チューニングTips
**************************************************
**************************************************
それでは早速いきましょう!
1.実行計画の見方
です。
実行計画の取得~解析のながれ
①sysdbaユーザでsql*plusログイン
sqlplus conn / as sysdba
②PLAN_TABLE作成
2018/6/4訂正
誤)
@C:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\
正)
@C:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlxplan.sql
もしくは、utlcplan.sql?
③クエリ実行
explain plan for
[解析したいクエリ]select * from
④実行計画の取得
@C:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlxplp.sql
⑤実行計画の見方
---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost(%CPU)
---------------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | SORT GROUP BY |
| 2 | NESTED LOOPS |
| 3 | TABLE ACCESS BY INDEX ROWID | HOGE_IDX11
| 4 | NESTED LOOPS |
| 5 | TABLE ACCESS BY INDEX ROWID | HOGE_HOGE1
(省略)
---------------------------------------------------------------------------------
基本はCostが極端に上がっている箇所を要チェック!
RANGE SCANなら問題ない(はず)
一番ネスト深い位置からスタートし、同階層に複数ある場合には
Idが若い(上から)順にアクセスされる。(アクセス順序)
この例だと
3 → 5 → 2 → 4・・・
<ポイント>
★1.アクセスパスについて
FULL SCAN箇所ないか
★2.結合順序
妥当かどうか
★3.結合方式
MERGE JOIN CARTESIAN(直積結合)が発生している場合には、結合方式の変更する必要あり!
****************************************************************************************
次に
2.チューニングTips
代表的なものを整理しておく。
<ポイント>
★1.INNER JOIN句内で絞り込みできないか検討してみる
★2.関数は右側に書く
★3.暗黙の型変換が起きないようにする。
ex.XXX=''とか
★4.IS NULL だとインデックスが効かないため、DB項目設計時に考慮しておく。
ex.名称項目 is not nullとかしないくてもいいように制御用のFLGを用意するとか
名称有無FLG='1'で要件満たせるならOK!
★5.LIKEの中間一致、後方一致は使わない
ex.Function Index検討する。
★6.<>ではなく、in句での置き換え可能か検討する
チューニングは実践してもなんぼだと感じます。
とはいっても性能問題で苦労したくないのも事実だけどね・・・
0 件のコメント:
コメントを投稿