SQL 実行計画取得での勘違いを共有します
2022 年 12 月 22 日 by hiro-kお疲れ様です。
皆さんはSQLを組み込む際、実行計画を取るかと思います。
その実行計画での私が勘違いをし、失敗をしたことについてお伝えしようかと思います。
SQLを組み込む際、通常バインド変数を利用するかと思います。
このバインド変数を利用するSQLの実行計画を取得する際、
バインド変数を意識せず、作成されたSQLを実行して実行計画を取得すると習っていました。
そのことを疑問に思ったり、内容を理解するために調べる等することが正しいのですが、
此処で鵜呑みにしてしまい、誤った知識を持ったままいました。
そして大量データの存在するテーブルに対するSELECTで
同じようにバインド変数を利用せず、実行計画を取得して実装しました。
そして性能評価時に思ったような性能が出ず、
何が原因か判りませんでした。
調べていくうちにバインド変数を利用するSQLの場合、
実行計画もバインド変数の設定が必要であることが判り、
ずっと勘違いをしていたことが判りました。
皆さんも教えてくれる方の内容をうのみにせず、
自分で調べて腑に落とすようにしましょう。
そして、実行計画を取得する場合、
実行SQLと同じ内容で実行計画を取得するようにしましょう。
※この問題について、バインド変数を設定すると実行計画が変化し、
何処に問題があるか判明して解決できました。
また、この問題で過去実装したSQLについても再度実行計画を
取得することとなり、幸い他のSQLについては
問題はありませんでしたが、多くの工数を使う事となりました。