果になります。また、内表の条件を
WHERE
句に指定するとインデクスを使用出来ず、性能が悪くな ります。ゆえに、LEFT OUTER JOIN
の内表はON
条件中で絞り込む必要があります。例を図 4-3-1に示します。
Point LEFT OUTER JOIN
の内表はON
条件中にて絞り込む○
SELECT A.SNAME, B.SURYOFROM SYOHIN A LEFT OUTER JOIN JUTYU B ON A.DNO = B.DNO AND B.SURYO > 0 WHERE A.SNAME = 'A' ;
×
SELECT A.SNAME, B.SURYOFROM SYOHIN A LEFT OUTER JOIN JUTYU B ON A.DNO = B.DNO
WHERE A.SNAME = 'A' AND B.SURYO > 0 ;
SELECT A.SNAME, B.SURYO
FROM SYOHIN A INNER JOIN JUTYU B ON A.DNO = B.DNO
WHERE A.SNAME = 'A' AND B.SURYO > 0 ;
内表をWHERE句で絞り込んで いるインデクスが使用されない。
図 4-3-1 LEFT OUTER JOIN 内表の絞り込み
INNER JOINと同じ結果になる。
等価なSQL
内表はON条件中にて絞り込む インデクスを使用する。
結合検索に関する記述
5. 表の分割に関する記述
分割表を使用することで性能向上が図れます。
この利点を活かす
SQL
コーディングについて示します。© Hitachi, Ltd. 2013 , 2015. All rights reserved.
注文日 注文コード 商品コード 数量 ・・・
2009-01-15 10111011 13425 100
・・
2010-03-28 12104567 92473 10
・
・
2011-05-30 15012890 51247 50
・
・
2012-07-06 17309684 10496 30
・
・
2013-11-09 19109953 30929 150
・
・
表の分割とは、一つの表を特定の列の値を基に複数の領域へ分割して格納し、管理する方 法です。分割した表を分割表といい、表を分割するときに指定した特定の列を分割キーとい います。SQL実行時は、探索条件に分割キーを指定すると対象となるデータが格納されて いる領域を判定し、必要な領域にのみアクセスします。
解説
アプリケーション側では、表の分割/非分割を 意識しなくてもアクセス可能ですが、分割キーに よるアクセス範囲と(パラレルサーバの)BES間 データ転送方法(5-1-1参照)を意識することで 性能を向上できます。
例)
SELECT
商品コード,
数量FROM
注文履歴表WHERE 注文日 = '2011-04-01'
⇒ 検索対象のRDエリアはRDAREA3のみとなる。
表の分割の詳細につきましては、マニュアル
「システム導入・設計ガイド」ー「表の設計」を 参照してください。
表の分割に関する記述
5-1 表の分割とは
51
◆注文日による表の分割の例
注文履歴表
'2010-01-01'
~'2010-12-31' RDAREA2
'2011-01-01'
~'2011-12-31' RDAREA3
'2012-01-01'
~'2012-12-31' RDAREA4
'2013-01-01'~
RDAREA5
~'2009-12-31' RDAREA1
分割キー
5-1 -1 BES 間データ転送方法(パラレルサーバ)
転送方法の条件
転送元 方式 転送先
パラレルサーバで表の結合する際、BES間のデータの転送をともないます。分割表の結合 では、表の分割キーを結合キーに含むことで、効率よく処理できます。
解説
表の分割に関する記述
サーバ サーバ サーバ サーバ 分割キーによって転送先サーバを決定 サーバ サーバ サーバ サーバ 常に同じ転送先のサーバにデータを転送
サーバ サーバ サーバ サーバ すべての転送先サーバにデータをコピー して転送
1対1転送
( 1 TO 1 )
下記の条件をすべて満たす場合。
・データ転送先の表がキーレンジ 分割表またはハッシュ 分割表。
・転送先の表の分割キーが結合 キーに含まれている。
下記の条件をすべて満たす場合。
・両方の表の分割キー、分割の 種類、分割条件、格納先BESが 完全に一致している。
・両方の表の分割キーが結合 キーに含まれている。
分割キーが、結合キーに含まれ ていない。
注:分割数が多く、転送元のヒット 件数が多いほど、通信および結 合オーバヘッドが大きくなり、性 能が悪くなる。
BES間データ
転送方法の種類キーレンジ転送
(