TOP > SQLを共有する

SQLを共有する

投入されたSQLはOracleが色々解析する様で、負荷が大きい作業なんだとさ。
で、解析されたSQLは「共有SQL領域」というメモリ上の領域にキャッシュしておくんだと。
そのキャッシュされたSQLを使えば、解析フェーズが無くなってパフォーマンスがあがります。
同じ内容のSQLでも大文字小文字の違いで違うモノになるんで、色々試してみるのがいいでしょう。

バインド変数を使う

ボク、これは非常によく使います。
SQLに定義した定数に値を代入する事を「バインドする」といい、対象の変数の事を「バインド変数」といいます。
実行環境によって異なるけども、よくあるバインド変数の表現は :code の様にコロンをつけます。

:code

 

たとえば、次の2つのSQLは同じモノと解釈されないす。

select * from 得意先 where 得意先コード = 1234;
select * from 得意先 where 得意先コード = 9999;

得意先コード列に代入される値が違うので別モノと解釈されます
んで、2回解析フェーズが実行されます。

select * from 得意先 where 得意先コード = :tokui;

と、やって :tokui に値を代入してやればOKです。

 

SQLをあまり連続して投げない様な場合だと、たいしてありがたみがないけれども、連続して投げる場合は結構体感出来るんで、お試しアレ。

書き方を決めよう

同じSQLとは、完全に同じ文でないとだめという意味です。
そうです。大文字、小文字から、スペースの付け方まで。
みんなで書き方決めましょう。

ただし、PL/SQLなら、コンパイル時にある程度修正されるみたいです。(このあたりは何がどうなるのかよくわかりませんので調べてね)

 

 

 

 

思い出したかい?ボーイ? それとも知らなかったかい?