CQE と SQE の違い (効率/索引アドバイザー)

以下の SQL 文を使用して、CQE と SQE の違いについて見てみたいと思います。

SELECT year, part, orderkey, quantity
FROM item_fact i, part_dim p
WHERE i.partkey = p.partkey
AND year = 2002
AND orderkey = 100
AND (returnflag LIKE 'N' OR returnflag LIKE 'A');

V5R3 の Visual Explain

V5R3 の Visual Explain ではこうなります。
一時索引が使用されていることからも CQE が使用されていることがわかります。

索引アドバイザーを見てみましょう。
ITEM_FACT テーブルについてですが、WHERE 文で指定されているカラムの中で結合に使用されている PARTKEY が無視されているのがわかります。また、RETURNFLAG カラムは LIKE で使用されているのであまりインデックスに含めるには効率的ではないかもしれません。
選択カラムよりは結合カラムのインデックスの方が、少なくとも JOIN が必要な SQL については重要です。
CQE のオプティマイザーの索引の推奨の仕方が、なんかわかりますね。

V5R4 の Visual Explain

例の SQL 文に対して V5R3 では CQE が使用されましたが、V5R4 では SQE が使用されます。
矢印の下にある数字が選択された行数ですが、上述の CQE による選択に比較して格段に効率が良くなっているのがわかります。

こちらも索引アドバイザーを見てみましょう。
こちらはきちんと結合に使用されている PARTKEY が含まれています。

ちなみに「不明」アイコンについては、以下のようなヘルプがあります。

索引作成後 (V5R4)

索引アドバイザーに従って索引を作成後、もう一度同じ SQL 文の Visual Explain を見てみましょう。
作成された索引が使用され、「不明」アイコンが消えていることが確認できます。(V5R4)

以前見たように、該当テーブルを「テーブル」の中から選んで、右クリックメニューの「索引表示」を行うと、以下のようにインデックスがどう使用されたかが出てきます。
たとえば、そのインデックスは照会そのものに直接使用されたのか、または統計情報を得るためにのみ使用されたのか、それぞれそれは今まで何回くらいずつか、などといったこともわかるようになっています。

索引作成後 (V5R3)

V5R3 でも推奨にしたがって作成された索引は使用されます。
矢印の下の数字はあまり変わっていないですね。一時索引を作成するコストが削減されるのがメリットということでしょう。

ただし、キーの特定には PARTKEY が使用されていません。(V5R3)

V5R4 で推奨されたものと同じ PARTKEY を含むインデックスを作成すると、やはりそちらが使用されるようになります。

矢印の下の件数を見てください。上のものより減っていることがわかりますね。CQE のオプティマイザーにとってもやはり結合カラムが重要である、ということには変わりはないわけです。(V5R3)

[Top Pageに戻る]

Ads by TOK2