Knowledge‎ > ‎

バインド変数を含むSQL

バインド変数を使用すると、そのSQLは使いまわされハードパースの回数を減らすことができます。ハードパースを減らせばその分DBのパフォーマンスを向上させることが期待できます(※1)。

しかし、どんなSQLでもバインド変数を使用すれば必ず最適な結果が得られるというわけではありません。むしろバインド変数を使用することによりパフォーマンスが大幅に劣化する場合もあります。DBの特性を理解しSQLの性質を考慮したうえで、バインド変数を使用するかどうか判断する必要があります。

効果がある場合と悪影響がある場合は以下です。

効果がある場合
  • 抽出条件の値のみ異なるSQLが繰り返し実行される場合
  • 抽出条件の値に関わらず、最適な実行計画が変わらないSQL
例:主キー指定のシンプルなSQL

むしろ悪影響がある場合
  • 日次バッチでのみの使用など、少数回しか実行しない場合
  • 抽出条件の値により最適な実行計画が変わるSQL
例:取得範囲が検索ごとに大きく異なる範囲検索


次にどのようなSQLは実行計画が変わらず、どのようなSQLならば最適な実行計画が変わるのかもう少し具体的に説明します。