ユーザーガイド > ビューとテーブルリソース > ビューとテーブルのリソースの設計 > [Model(モデル)]パネルでのビューの設計
 
[Model(モデル)]パネルでのビューの設計
[Model(モデル)]パネルは、SQLステートメントを(コードを記述せずに)作成して、異なるデータソースから有用なクエリー結果を取得するのに利用できるグラフィカルツールです。
ビューを設計するには
1.テーブル、プロシージャ、変換をビューにドラッグアンドドロップして、ビューのデータリソースを選択します。
2.テーブルの列をリンクしてテーブルをJOINします。
3.JOINプロパティを構成します。
a.JOIN論理演算子を定義します。
b.優先する結合アルゴリズムを指定するか、準結合の最適化を提案します。
c.クエリーエンジンが実行プランを最適化するのに役立つテーブルカーディナリティの推定を提供します。
d.結合の左、右、または両側のすべての行を含めます。
e.結合の順序を強制するか、結合内のテーブルの順序を入れ替えます。
4.SELECTステートメントのUNIONを作成し、一致するテーブルの行をまとめます。
5.SELECTステートメントとそれらのSELECTのUNION間を移動します。
6.クエリーヒントを使用して、返す最大行数を設定する、大文字と小文字を区別する、末尾のスペースを無視する、クエリーをSTRICTとしてマークする(SQL-92に準拠)、またはクエリーがメモリー制約を超える可能性が高い場合にクエリー処理をディスクに強制するようにします。
Studioでのビューの設計に関する詳細は、次のトピックを参照してください。
[Model(モデル)]パネルへのリソースの追加
[Model(モデル)]パネルでのテーブルの結合
結合順序の強制
UNIONの作成
[Model(モデル)]パネルでのテーブル間の移動
DISTINCTクエリーオプションの指定
クエリーヒントの指定
[Model(モデル)]パネルへのリソースの追加
データベーステーブル、テキストファイル、プロシージャ、その他のビューなどのリソースを[Model(モデル)]パネルに追加できます。ビューに含めることができるのは、すべてのスカラー出力または1つのカーソル出力のみを含むプロシージャのみです。
[Model(モデル)]パネルにリソースを追加するには
1.新しいビューの作成」の説明に従って新しいビューを作成します。
2.リソースツリーでリソースを見つけます。
3.リソースを[Model(モデル)]パネルにドラッグアンドドロップします。
注意: CtrlキーまたはShiftキーを押しながらクリックして複数のリソースを選択し、[Model(モデル)]パネルにドラッグアンドドロップします。
4.必要に応じてリソースを再配置します。
[Model(モデル)]パネルでのテーブルの結合
設計するビューには、テーブルの結合を含めることがあります。多くの場合、次のように結合プロセスのプロパティを調整することで、クエリーのパフォーマンスを向上させることができます。
結合された列を比較する方法を指定する
結合アルゴリズムとカーディナリティを指定する
準結合最適化を選択する
特定のテーブルのすべての行を含めるかどうかを指定する
[Model(モデル)]パネルで、選択したテーブル間の結合は、それらのテーブルを結ぶ線として表示されます。この種類の結合は、INNER JOINと呼ばれます。調整オプションの詳細については、「パフォーマンスの調整」を参照してください。
[Model(モデル)]パネルでテーブルを結合するには
1.結合するテーブルの1つで列を選択します。選択する最初の列は、[Join Properties(結合プロパティ)]ウィンドウで[Swap Order(順序の入れ替え)]を選択した場合を除き、結合の「左側」です。
2.マウスボタンを押したまま、左側のテーブルの選択した列から、右側のテーブルになるテーブル内にドラッグして結合します。
3.JOINSに指定した列のデータ型が互換性があることを確認します。
列のデータ型を確認するには、[Columns(列)]タブをクリックして、[Columns(列)]パネルを開きます。
4.JOIN行の結合アイコンを右クリックし、[Properties(プロパティ)]を選択して、[Join Properties(結合プロパティ)]ウィンドウを開くか、ひし形のグラフィックをダブルクリックします。
5.[Join Properties(結合プロパティ)]ウィンドウの上部中央にあるドロップダウンリストから、列の比較方法(=、<=、>など)を選択します。
6.[Include rows(行を含める)]セクションで、チェックボックスをオンにして、結合に含める行を指定します。
上のボックスを選択して、[LEFT OUTER JOIN(左外部結合)]を指定します。
下のボックスを選択して、[RIGHT OUTER JOIN(右外部結合)]を指定します。
7.[Join Details(結合の詳細)]セクションで以下を行います。
a. [Specify Join Algorithm(結合アルゴリズムの指定)]ドロップダウンリストで、結合に使用するアルゴリズムを選択します。
さまざまなアルゴリズムの説明については、「準結合最適化オプション」を参照してください。
b. 左カーディナリティ制約を指定します。
結合の左側にカーディナリティのヒントを提供します。正の数値(例: 50)である必要があります。
c. 右カーディナリティ制約を指定します
結合の右側にカーディナリティのヒントを提供します。500などの正の数値である必要があります。
d. [Semijoin Optimization(準結合の最適化)]チェックボックスをオンにすると、TDVクエリーエンジンにより、結合のために処理される行数の結果を最小限にするように試行され、クエリーエンジンのパフォーマンスが向上します。
e. 次の順序オプションのいずれかを選択します。
[Default Ordering(デフォルトの順序)]—デフォルトの順序を適用します。
[Swap Order(順序の入れ替え)]—結合の左側と右側を入れ替えます。
[Force Join Ordering(結合順序の強制)]—結合順序の最適化をオーバーライドします。
f. [OK]をクリックして結合仕様を保存します。
8.[SQL]タブをクリックして、SQLステートメントで結合が次の例のように指定されていることを確認します。
SELECT
products.ProductID,
orderdetails.UnitPrice,
orderdetails.Status
FROM
/shared/examples/ds_inventory/products products FULL OUTER { OPTION SEMIJOIN="True", LEFT_CARDINALITY="50", RIGHT_CARDINALITY="500" } JOIN
/shared/examples/ds_orders/orderdetails orderdetails
ON products.ProductID = orderdetails.ProductID INNER JOIN
/shared/examples/ds_orders/orders orders
ON orderdetails.OrderID = orders.OrderID
 
9.[OK]をクリックします。
結合順序の強制
データソーステーブルと最適化アルゴリズムから収集される統計に基づいて、クエリー実行プランを並べ替えるようにクエリーエンジンに許可できます。ただし、テーブルの内容に関する知識があれば、記述したSQLから得られる処理順序を強制する方が有利な場合がよくあります。
注意: ユーザー指定のオプションを含む結合は、並べ替えることができません。
テーブルを結合した順序に従うようにクエリーエンジンに指示できます。詳細については、「SQL結合の並べ替え」を参照してください。
テーブル結合の処理順序を強制するには
1.テーブルを必要な順序で結合します。
2.結合線を右クリックして、[Properties(プロパティ)]を選択します。「[Model(モデル)]でのテーブルの結合」を参照してください。
3.[Join Properties(結合プロパティ)]ウィンドウで、[Force Join Ordering(結合順序の強制)]を選択します。
4.このステップで、フレーズ{OPTION FORCE_ORDER="true"}をFROM句に追加し、FROM句で指定した順序でテーブルをクエリーするようにクエリーエンジンに通知します。
UNIONの作成
Studioを使用すると、2つ以上のテーブル間にUNIONをグラフィカルに作成できます。
UNIONをグラフィカルに作成するには
1.リソースを[Model(モデル)]パネルにドラッグして、UNIONの最初のテーブルを作成します(まだ存在しない場合)。
2.[Model(モデル)]パネルの背景フィールドを右クリックし、[Add Union(UNIONの追加)]オプションを選択します。
リソースは、Union0という名前の[Navigator(ナビゲーター)]ウィンドウ内に凝縮されます。テーブルは、[Navigator(ナビゲーター)]ウィンドウ内の小さなアイコンとして表示されます。
3.Studioの設計スペースをもう一度右クリックし、[Add Union(UNIONの追加)]オプションを選択して、Union1という名前の2番目のUNION設計スペースを開きます。
4.Union1の任意の場所をダブルクリックして、編集するUNIONを開きます。
Union1をダブルクリックすると、Union1が設計スペース全体に空白で表示され、次のステップでUNIONに含めるリソースを追加できるようになります。
5.SELECTステートメントのUnion1側にリソースをドラッグアンドドロップします。
UNIONが正しく機能するために、UNIONの2つのテーブルの定義は同じ数の列が同じ順序で配置され、データ型が互換性がある必要があります。
6.UNIONの2番目のテーブルを定義した後、設計スペースの任意の場所を右クリックし、[UP(上へ)]を選択して、最上位のクエリービューナビゲーターに戻ります。
デフォルトでは、2つのテーブルはUNION ALLで結合されていますが、UNION、EXCEPT、またはINTERSECTに変更できます。
7.UNIONコネクターをダブルクリックして、UNIONプロパティを開きます。
8.[Union Properties(UNIONプロパティ)]ウィンドウで設計を選択します。
a. デフォルトでは、2つのテーブルはUNION ALLで結合されています(デフォルトでは[All(すべて)]チェックボックスがオンになっています)が、[UNION]、[EXCEPT]、または[INTERSECT]に変更できます。
b. 必要に応じて、[PARALLEL(パラレル)]、[FORCE DISK(ディスクの強制)]、または[DISABLE PUSH(プッシュの無効)]チェックボックスをオンにします。
TDVでサポートされているSQL (UNION、EXCEPT、INTERSECT、Allオプション)および使用可能なクエリーエンジンのUNIONオプションの説明については、『TDVリファレンスガイド』を参照してください。
c. [OK]をクリックしてUNIONプロパティを保存します。
9.ビューを保存します。
UNION ALLおよびJOINの切り替え数の制御
実行プランを最適化するため、クエリーエンジンはUNION ALLとさまざまな種類のJOIN(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN)を切り替えることができます。2つのSELECTステートメントに重複が含まれていない場合、分配法則はUNION DISTINCTとINNER JOINにも機能します。
デフォルトでは、UNIONとJOIN間のフリップの最大数は2です。この最大値は変更できますが、増やすとメモリー消費量とプラン生成時間に悪影響を与える可能性があります。
UNION ALLとJOIN間の最大切り替え数を変更するには
1.Studioのメインメニューの[Administration(管理)]から、[Configuration(構成)]を選択します。
2.[Server(サーバー)] > [SQL Engine(SQLエンジン)] > [Overrides(オーバーライド)]に移動します。
3.値をデフォルトの2から別の整数に変更します。
4.パネルの下部にある[OK]をクリックします。
[Model(モデル)]パネルのテーブル間の移動
[Model(モデル)]パネルでは、広い領域に多くのテーブルを保持することができます。[Model(モデル)]パネルの一部のみが常に表示されます。表示領域は、スクロールバーまたは[Navigator(ナビゲーター)]を使用して調整できます。
[Model(モデル)]パネルのテーブル間を移動するには
1.[Navigator(ナビゲーター)]ボタンをクリックして[Navigator(ナビゲーター)]ウィンドウを開きます。
[Navigator(ナビゲーター)]ウィンドウが開き、[Model(モデル)]パネルにすべてのテーブルが配置された縮小バージョンが表示されます。
[Navigator(ナビゲーター)]ウィンドウを最初にクリックすると、青い長方形が表示され、[Model(モデル)]パネルに現在表示されている領域が示されます。
2.青い長方形の内側をクリックして、参照したい領域にドラッグします。
DISTINCTクエリーオプションの指定
[Model(モデル)]パネルで、DISTINCTオプションをSQLクエリーに簡単に追加できます。このクエリーオプションで、重複する行が無視されるようにします。
[Model(モデル)]パネルでDISTINCTクエリーオプションを指定するには
1.[Model(モデル)]パネルの任意の場所を右クリックします。
2.[Select Distinct(DISTINCTの選択)]を選択します。
選択すると、次の例に示すように、DISTINCTがビューのSELECTステートメントに追加されます。
 
SELECT DISTINCT
*
FROM
/shared/examples/ds_inventory/products products
 
3.[SQL]パネルを選択し、SQLステートメントにDISTINCTオプションが含まれていることを確認します。
クエリーヒントの指定
クエリーヒントは、TDVクエリーエンジンのSQLステートメントを最適化するために含めることができるオプションです。クエリーにオプションを指定すると、構成パラメーター値を使用して設定されたデフォルトがすべてオーバーライドされます。
[Model(モデル)]パネルで、現在のビューに対して次のクエリーヒントを指定できます。
フェッチする行の最大数を設定する
大文字と小文字の区別を設定する
末尾のスペースを無視するかどうかを設定する
一時的なクエリーデータストレージにメモリーではなくディスクを使用するようにクエリーエンジンを強制する
数学関数と文字列関数がSQL-92 (STRICT)に準拠していることを要求する
注意: 他の多くのクエリーオプションは、[SQL]パネルで直接追加できます。これらは、『TDVリファレンスガイド』の「TDVクエリーエンジンオプション」に記載されています。
[Model(モデル)]パネルでクエリーヒントを指定するには
1.[Model(モデル)]パネルで、必要な数のテーブルを追加します。
2.[Model(モデル)]パネルの任意の場所を右クリックし、[Query Hints(クエリーのヒント)]を選択します。
3.[Query Hints(クエリーのヒント)]ダイアログボックスで、[Max Rows Limit(最大行数の制限)]フィールドにフェッチする行の最大数を指定します。
4.[Case Sensitive(大文字と小文字を区別)]ドロップダウンリストで、次のオプションのいずれかを選択します。
[Server Default(サーバーのデフォルト)]—サーバーのデフォルト設定
[True]—このオプションは、大文字と小文字を区別して比較するように設定します。
[False]—このオプションは、大文字と小文字を区別せずに比較するように設定します。
5.[Ignore Trailing Spaces(末尾スペースの無視)]ドロップダウンリストで次のオプションのいずれかを選択します。
[Server Default(サーバーのデフォルト)]—サーバーのデフォルト設定
[True]—このオプションを使用すると、比較で末尾のスペースが無視されます。
[False]—このオプションを使用すると、比較で末尾のスペースが無視されません。
6.該当するチェックボックスを選択します。
[Force Disk(ディスクの強制)]—このオプションを選択すると、クエリーエンジンにより、可能な限りメモリーではなくディスクが使用されるように強制されます。
[Strict(厳格)]—選択すると、データソースが数学関数と文字列関数のSQL-92標準に準拠していない場合、これらの関数は、クエリーエンジンによりデータソースにプッシュされません。これはパフォーマンスに影響を与える可能性があります。
7.すべてのエントリーをクリアする場合は、[Clear All(すべてクリア)]ボタンを使用します。
8.オプションを設定した後、[OK]をクリックします。
9.[SQL]タブをクリックして、次の例のように、SQLに含まれる結果のオプションを表示します。
SELECT { OPTION MAX_ROWS_LIMIT="50", IGNORE_TRAILING_SPACES="True", CASE_SENSITIVE="True", STRICT="true", FORCE_DISK="true" }
DISTINCT products.ProductID,
products.ProductName,
products.UnitPrice
FROM /shared/examples/ds_inventory/products products