SQL 実行計画取得での勘違いを共有します

2022 年 12 月 22 日 by hiro-k

お疲れ様です。

皆さんはSQLを組み込む際、実行計画を取るかと思います。
その実行計画での私が勘違いをし、失敗をしたことについてお伝えしようかと思います。

SQLを組み込む際、通常バインド変数を利用するかと思います。
このバインド変数を利用するSQLの実行計画を取得する際、
バインド変数を意識せず、作成されたSQLを実行して実行計画を取得すると習っていました。
そのことを疑問に思ったり、内容を理解するために調べる等することが正しいのですが、
此処で鵜呑みにしてしまい、誤った知識を持ったままいました。

そして大量データの存在するテーブルに対するSELECTで
同じようにバインド変数を利用せず、実行計画を取得して実装しました。
そして性能評価時に思ったような性能が出ず、
何が原因か判りませんでした。
調べていくうちにバインド変数を利用するSQLの場合、
実行計画もバインド変数の設定が必要であることが判り、
ずっと勘違いをしていたことが判りました。

皆さんも教えてくれる方の内容をうのみにせず、
自分で調べて腑に落とすようにしましょう。
そして、実行計画を取得する場合、
実行SQLと同じ内容で実行計画を取得するようにしましょう。

※この問題について、バインド変数を設定すると実行計画が変化し、
 何処に問題があるか判明して解決できました。
 また、この問題で過去実装したSQLについても再度実行計画を
 取得することとなり、幸い他のSQLについては
 問題はありませんでしたが、多くの工数を使う事となりました。

TrackBack