外部結合を行っているViewに条件を付けて検索する時、結合元と結合先のどちらに条件を付けるかで、以下のような違いがあるため注意してください。

●結合元に条件が付与された場合、データの絞り込みを行った後に結合処理が行われます。
●結合先に条件が付与された場合、データの絞り込みを行う前に結合処理が行われます。この場合、結合対象のデータが減らないため、パフォーマンスに影響を与えます。

※結合元と結合先に関しては下記図を参照してください。

以下は外部結合しているViewに条件を付けて検索する例になります。

outer_view2

結合元と結合先に条件を付けてViewを検索した際の違いを確認していきます。

1.lineorder表とpart表を外部結合するViewを作成します。

2.結合元のlineorder表の”lo_orderdate”に条件を付けて検索します。

3.実行計画を確認します。
lineorder表を検索時に条件が付与されていることがわかります。

4.結合先のpart表の”p_color”に条件を付けて検索します。

5.実行計画を確認します。
part表を検索時に条件が付与されず結合時に付与されていることがわかります。

※実行計画の取得方法や見方に関しては下記サイトを参照してください。
「SQLの実行計画を確認する方法」
http://vertica-tech.ashisuto.co.jp/sql-plan/

対処方法

結合先のテーブルのデータを絞って結合するためには、Viewの中に条件を付ける必要があります。

検証バージョンについて

この記事の内容はVertica 9.2で確認しています。

更新履歴

2019/04/22 検証バージョンを9.2に変更
2016/04/14 本記事を公開