L
o
a
d
i
n
g
.
.
.

ホーム

お知らせ

製品・ソリューション

サービス

導入事例・パートナー

EXEM Academy・ブログ

会社情報

採用情報

2021.08.11

SQLチューニング(第11回)「スカラーサブクエリの理解と効率的なSQLの作成」(1/5)

今回から、5回のシリーズで「スカラーサブクエリの理解と効率的なSQLの作成」に関する情報をお届けします。それでは早速内容に入っていきましょう。


3.1.1 スカラーサブクエリの特性の理解

Select Column List節(以後Select節)に使われたサブクエリをスカラーサブクエリと呼び、その特性について、以下に記述する。

3.1.1.1 最大結果件数、繰り返し実行される

スカラーサブクエリの“最大”反復実行される回数はSQLの結果件数回である。 ここで“最大”という点に注目しよう。 スカラーサブクエリはDeterministic属性を有している。 Deterministic属性というのは、同じ入力値に対して結果値が常に同じだということを保障することである。 したがってスカラーサブクエリは入力値に対する結果値をMulti Buffer[1]に保存しておく。 以後同じ入力値で実行する場合、スカラーサブクエリを実行しないで、Multi Bufferに保存しておいた結果値を利用して値をリターンすることになる。

[1] スカラ副問い合わせは、抽出結果だけ繰り返し実行される負荷を除去するために、入力値が同じである場合、結果の値も同じであるDeterministic属性を持っている。このとき、入力値と結果値を格納する場所がMulti Bufferある。9iでは一つのバッファを利用したが、10gではMulti Bufferを使用することにより、より多くのデータを保存することができる。Multi Bufferの場合Hidden Parameterの_query_execution_cache_max_sizeによりバッファサイズの調整が可能である。Default値は64KBである。

例えば、SQLの総抽出件数が100件で、スカラーサブクエリの入力値で使われるカラムの値が皆同一ならば、最初の1回はスカラーサブクエリを直接実行するが、残りの99件に対してはすでに処理された結果値がMulti Bufferに存在するのでスカラーサブクエリを実行しないで結果をリターンすることができる。しかし、入力値で使われるカラムの値がUniqueある場合は、入力値が同じ場合がないので、保存された値を利用できなくて最終抽出件数と同一に合計100回を繰り返し実行することになる。


ちょっと短いですが、今回はここまでです。次回は、スカラーサブクエリの実行回数に関する話題です。ご期待ください。 See You ^^