HiRDB SQLコーディングガイドライン

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "HiRDB SQLコーディングガイドライン"

Transcription

1 HiRDB SQL コーディングガイドライン第 08 版 2015/06 株式会社日立製作所情報 通信システム社 IT プラットフォーム事業本部 DB 部

2 Contents 1. はじめに 2. インデクスを有効に使う記述 3. 副問合せに関する記述 4. 結合検索に関する記述 5. 表の分割に関する記述 6. DBの件数を考慮した記述 7. 排他に関する記述 8. 更新に関する記述 9. アプリケーション上での記述 10. 保守性を向上させるための記述 11. おわりに 1

3 1. はじめに 2

4 1-1 本資料について 目的データベース ( 以下本ドキュメントでは DB と略す ) へのアクセス性能は SQL 文のコーディング方法により左右されることがあります 本ガイドラインでは DB へのアクセス性能を良くするための推奨の SQL コーディング方法を示します 本ガイドラインを各プロジェクトの SQL コーディング規約を制定する際に活用していただくことで DB にアクセスするアプリケーションの性能トラブルを 未然に防ぐことを目的とします なお 内容は一般的な推奨であり 必要であれば異なる SQL コーディング方法をとることを妨げるものではありません 対象バーション本ドキュメントは HiRDB Version 8 以降を対象としています 留意事項本ドキュメントの例題にて 対比している SQL は 必ずしも等価な SQL でないため SQL 文を変形するときは 十分注意してください コーディング例の凡例本ドキュメントの例題にて コーディングの推奨度合を記号表記しています 記号と意味を以下に示します : 特に推奨 : 推奨 : 改善の余地あり : 推奨しない 改善が必要 以下の URL より HiRDB の基礎知識を理解しておくと 本資料の理解が深まります HiRDB 技術資料の URL 3

5 1-2 アプリケーション開発の流れ 1. スキーマ設計 性能とのトレードオフで正規化のレベルを考える 2. プロジェクト内の SQL コーディング規約制定 ジョインは 4 表まで など プロジェクトで性能も含めた品質を確保するための標準を定める 本ガイドラインを活用 3. アプリケーション開発 コーディング規約に従って アプリケーションを開発する 4. 単体テスト SQL のアクセスパスを確認して アプリケーション開発へフィードバック 5.SI 4

6 1-3 SQL のアクセスパスの評価 本ドキュメントを利用し SQL コーディング後 インデクスの使用有無 結合方法などが意図した通りになっているか 効率の良いアクセスパスになっているかを SQL トレースの UAP 統計レポート機能にて確認することを心がけてください アクセスパスの取得 クライアント環境定義に以下を追加し UAP 統計レポートの中で取得します No. クライアント環境定義 統計情報の内容 1 PDCLTPATH 情報出力先 省略時は カレントディレクトリが仮定されます 2 PDSQLTRACE 3 PDUAPREPLVL 4 PDREPPATH トレースのファイルサイズ (byte) を指定 0 を指定した場合は ファイルの最大のサイズとなります 省略をした場合は 情報を出力しない UAP 統計レポートの出力情報を指定します 出力には アクセスパス情報 SQL 単位の情報 UAP 単位の情報 SQL 実行時の中間結果情報があります アクセスパスの解析時は a を指定し全ての情報を出力することをお勧めします UAP 統計レポートファイルを PDCLTPATH で指定したディレクトリとは別の場所に格納したい場合に指定する 指定すると CONNECT 単位にファイルが分かれる アクセスパスのチェック 以下のキーワードで示されるアクセスパスは 定性的に負荷の高い処理であるためチェックアウトします ' TABLE SCAN ' ( データページ全参照 [ テーブルスキャン ]) ' AND PLURAL INDEXES SCAN ' (AND 複数インデクス利用 ) ' MERGE JOIN ' ( マージジョイン ) ' CROSS JOIN ' ( 直積 ) ' FULL SCAN ' ( インデクスリーフページのフルスキャン ) ' WORK TABLE SUBQ ' ( 副問合せ結果の作業表への繰り返しスキャン ) ' NESTED LOOPS WORK TABLE SUBQ ' ( 副問合せの繰り返し実行と作業表へのスキャン ) 5

7 2. インデクスを有効に使う記述 容量の多い DB を高速にアクセスする手段としてインデクスがあります しかし インデクスを定義したにもかかわらず インデクスが有効に使用されないことがあります 6

8 インデクスを有効に使う記述 コーディング方法を説明する前に まず インデクスをどのように使ってアクセスするデータを絞り込んでいるか ご説明します 7

9 インデクスを有効に使う記述 検索方式 解説各検索方式の特徴について解説します テーブルスキャン 検索条件の内容にかかわらず 検索対象表の全行をシーケンシャルにアクセスする方法です 条件によって検索結果を絞り込める場合でも すべてのデータページを参照するため データ量が多いと性能は悪くなります インデクススキャン インデクスを参照して条件に該当するデータを絞り込んでから テーブルのデータをアクセスする方法です インデクスであまり絞り込めない場合は データページに対するランダムな入出力が増え 性能が悪くなります 特にインデクスの全範囲が検索対象になるケースをフルスキャンと呼びます インデクス キースキャン インデクスを参照してインデクス中のデータ ( インデクス構成列の値または行識別子 ) にアクセスする方式です インデクスであまり絞り込めない場合でも データページの入出力がなく インデクスページを参照するだけなので 高速に検索できます インデクス 表データ 表データ 8

10 インデクスを有効に使う記述 インデクスの基本構造 解説 インデクスは キーとキー値から構成されます 列の内容を示した列名のことをキーといいます また 列の値のことをキー値といいます 表を検索するときの探索条件で使用する列にインデクスを作成しておくと 表の検索性能が向上します インデクスの B-tree 構造 論理単位 ルートページ中間ページリーフページ 説明 B-tree 構造中の最上位のインデクスページ 下段のページを指しています B-tree 構造中の中間のインデクスページ 下段のページを指しています B-tree 構造中の最下位のインデクスページ 各インデクスページのキー値とそのアドレスを持っています 412M 671M ルートページ 202M 412M 591S 671M 中間ページ 101L 202M 302S 412M 591L 591S 671L 671M リーフページ : インデクスページ 9

11 インデクスを有効に使う記述 表検索時の条件の分類 解説 SQL の探索条件は すべてサーチ条件にて評価できるのが望ましいです そして それは SQL の記述により変わります インデクス サーチ条件 : インデクスをサーチするための条件で インデクスのサーチ範囲が決定 サーチ条件なしでのインデクス利用 : インデクスリーフページのフルスキャン データ キー条件 : インデクス構成列のキー値で評価する条件で データページ中のアクセス行を削減 サーチ条件 + キー条件 : データページのアクセス行が決定 行の取出し その他の条件 : データページ中の行データを参照して 条件を評価 10

12 インデクスを有効に使う記述 次にインデクスを有効に使用するための SQL コーディングについて示します なお 設計段階ではインデクスを定義しない予定であっても 後のチューニングによりインデクスを定義することが考えられるため インデクス定義のみでインデクスが有効となるような SQL にしておく必要があります 11

13 インデクスを有効に使う記述 2-2 条件指定によるインデクス効果 (1) Point WHERE 句の AND 条件の指定順は 性能に影響しない 条件指定 (WHERE 句 ) の "AND" "OR" 指定の記述によって 指定項目が同じ場合でもインデクスの効果が低い場合があります = 条件の項目はインデクスの構成列の先頭から連続している項目を AND で指定すると効率が良いです 例を図 に示します インデクスは以下の複数列インデクス A(C1,C2,C3) すべてand 条件の場合 項目の順番が入れ替わる ~ where C1 = 10 and C2 = 20 and C3 = 30 ~ where C1 = 10 and C3 = 30 and C2 = 20 ~ where C3 = 30 and C2 = 20 and C1 = 10 複数列インデクス A を C1 C2 C3 の順で定義 C1 C2 C3 の順番には関係なく すべてのケースでインデクスが有効となる 図 "AND" "OR" 指定その 1 12

14 インデクスを有効に使う記述 条件指定によるインデクス効果 (2) すべてand 条件の場合 インデクス未定義項目あり ~ where C1 = 10 and C4 = 40 and C3 = 30 インデクスは以下の複数列インデクス A(C1,C2,C3) 一致する先頭の C1 のみインデクスのサーチ条件が有効となる インデクスの先頭項目なし ~ where C2 = 20 and C4 = 40 and C3 = 30 and 条件とor 条件の場合 ~ where ( C1 = 10 ) or ( C1 = 11 and C2 = 22 ) ~ where ( C1 = 10 and C2 = 20 ) or ( C3 = 30 ) 先頭の C1 が一致しないためインデクスが無効となる ( リーフページのフルスキャン ) and が優先されるが or のそれぞれに C1 があるので インデクスは有効になる ( インデクス検索を or の両辺で 2 回行う ) and が優先され C3 が or で独立していると C3 はインデクスの先頭でないのでインデクスが無効となる ( リーフページのフルスキャン ) 図 "AND" "OR" 指定その 2 13

15 インデクスを有効に使う記述 条件指定によるインデクス効果 ( 例外的な事例 ) 解説 インデクスを有効に使用する SQL コーディングをしていても性能が出なかった事例を示します データの値がすべて同じ列は 基本的にインデクスから削除してください 業務等の都合で当該列をインデクスから削除が出来ない場合は 後方の構成列としてください SELECT C1, FROM TBL1 WHERE C1 =? AND C3 =? AND CFLG =? インデクスは以下の構成列の主キー (PK) のみ定義されていた TBL1(C1,C2,C3) 値がすべて同じ列 (C1) がインデクス構成列の先頭 主キーによる検索を実施 しかし 性能が出なかった 原因は? PK インデクスの第 2 構成列 C2 は 条件で未使用のため 検索範囲の絞り込みは 第 1 構成列でのみ実施した TBL1 第 1 構成列 C1 は 値がすべて同じだったため インデクス全範囲を検索となり遅かった 図 例外的な事例 14

16 インデクスを有効に使う記述 探索条件と複数列インデクスのサーチ範囲 上段 インデクスのサーチ範囲 インデクス (C1, C2, C3) 下段 探索条件を満たす範囲 C1 アアアアアアアアアアアアイイイイイイイイイイイイウウウウウウウウウウウウエエエエ 上段と下段の差が大きい 効率悪 C2 C3 A A A A B B B B C C C C A A A A B B B B C C C C A A A A B B B B C C C C A A A A C1= イ AND C2= B AND C3= 2 C1= イ AND C2= B C1= イ C1= イ AND C2= B C1= イ AND C2>= B AND C3>=2 AND C3>=2 C1= イ AND C2>= B AND C3= 2 C1= イ AND C2>= B C1= イ AND C2>= B AND C3<=2 C1>= イ AND C2= B AND C3= 2 C1>= イ AND C2= B AND C3>=2 C1>= イ AND C2= B C1>= イ AND C2= B AND C3<=2 C1>= イ C2= B AND C3= 2 C2= B C3= 2 ( 注 ) 表の下 3 つは リーフページのフルスキャンになり 特に効率が悪いです 15

17 インデクスを有効に使う記述 2-3 条件式での列演算の使用上の注意 (1) Point FROM 句の ON WHERE 句の探索条件において 列をスカラ演算しない ( 列を計算式の中に組み入れない ) 条件式に変換可能な場合 列をスカラ演算しないこと スカラ演算した条件はインデクスで評価されません または SQL 最適化オプションに スカラ演算を含むキー条件の適用 を指定した場合は インデクスのキー条件で評価しますが効率的に絞り込めません 例を図 に示します 例 1 ~ WHERE TANKA > ~ WHERE TANKA > 950 列を直接演算しない 例 2 ~ WHERE JDATE1 = '2002' AND JDATE2 = '0301' ~ WHERE (JDATE1, JDATE2) = ('2002','0301') 行値構成子で記述すれば効率よくインデクスを使用できる ~ WHERE JDATE1 JDATE2 = ' ' 図 スカラ演算の例その 1 列を連結して判定しない 16

18 インデクスを有効に使う記述 条件式での列演算の使用上の注意 (2) 例 3 ~ WHERE SNAME LIKE 'TOKYOU%' ~ WHERE SUBSTR(SNAME, 1, 6) = 'TOKYOU' 先頭文字比較は LIKE を使用する 例 4 ~ WHERE TANKA = 5 ~ WHERE TANKA * 12 = 60 列を直接演算しない 例 5 ~ (SNAME = 'xxx' AND ZSURYO = 1) OR (SNAME = 'yyy' AND ZSURYO <> 1) CASE 式を使用しない ~ SNAME = CASE WHEN ZSURYO = 1 THEN 'xxx' ELSE 'yyy' END 図 スカラ演算の例その 2 17

19 インデクスを有効に使う記述 2-4 条件式での変数 / 定数へのスカラ演算の使用上の注意 Point FROM 句の ON WHERE 句の探索条件において 変数をスカラ演算しない ( 変数を計算式の中に組み入れない ) 定数をシステム定義スカラ関数 ユーザ定義関数の引数に指定しない 変数をスカラ演算した条件はインデクスで評価されません または SQL 最適化オプションに スカラ演算を含むキー条件の適用 を指定した場合は インデクスのキー条件で評価しますが効率的に絞り込めません 定数をシステム定義スカラ関数 ユーザ定義関数の引数に指定した場合は 一切インデクスが使用されません 例を図 に示します 変数のスカラ演算 ~ WHERE SNAME =?? パラメタに値を渡す埋込み変数は あらかじめ CHAR(5) のデータとしておく ~ WHERE SNAME = CAST(? AS CHAR(5)) 定数のシステム定義スカラ関数 ~ WHERE SNAME = 'ABC' ~ WHERE SNAME = RTRIM('ABC ') 変数をスカラ演算しない あらかじめ必要な演算を実施した定数を指定する RTRIM は システム定義スカラ関数 図 変数 / 定数へのスカラ演算の例 18

20 インデクスを有効に使う記述 2-5 中間一致の回避 Point LIKE 述語は中間一致 ('%xx%') 後方一致 ('%xxx') を避け 極力前方一致 ('xxx%') になるように記述すること LIKE '%c%' でも インデクスを使用しますが ( 場合によっては使用しない ) インデクスのリーフページをフルスキャンします LIKE は LIKE 'c%' や LIKE 'c_' のように前方一致を指定すればインデクスの参照範囲を絞り込むことができるため 処理性能が向上することが多いです 例を図 に示します ~ WHERE SNAME LIKE 'TOKYOU%' ~ WHERE SNAME LIKE 'TOK%OU' ~ WHERE SNAME LIKE 'TOK ' 前方一致を用いる ~ WHERE SNAME LIKE '%KYO%' ~ WHERE SNAME LIKE '%KYOU' ~ WHERE SNAME LIKE ' YOU' 中間一致 後方一致は避ける ~ WHERE SNAME LIKE '_O_Y_U_' 図 LIKEの例 LIKE 述語のパターン文字列として? パラメタや埋込み変数を指定した場合も 上記の例のように 設定するパターン文字列を前方一致になるようにすると良いです 19

21 インデクスを有効に使う記述 2-6 複数列インデクスでの前方不一致検索の回避 Point 複数列インデクスの先頭構成列の条件を指定せず 第 2 構成列以降の条件を指定することは避ける 複数列インデクスで前方不一致検索 ( インデクス構成列の前方の列を指定しない ) を行うと インデクスのリーフページをフルスキャンします 例を図 に示します インデクスは以下の複数列インデクス X01(ZSURYO,COL) ~ WHERE ZSURYO = 20 AND COL = 'blue' ~ WHERE COL = 'blue' AND ZSURYO = 20 ~ WHERE ZSURYO = 20 ~ WHERE COL = 'blue' インデクス構成列の順と探索条件指定順は一致しなくて良い インデクスの先頭構成列のみ指定でも良い インデクスの後方構成列のみ指定 ( リーフページのフルスキャン ) 図 複数列インデクス例 20

22 インデクスを有効に使う記述 2-7 インデクス列のみ選択の使用 Point 選択式に指定する列は 必要最小限にし さらにインデクス構成列のみ指定すると高速化できる 問合せ指定でインデクス列のみを選択すると インデクス列の値は表からではなく 直接インデクスから読み込まれるため 非常に高速に処理できます ( インデクスページのみの読み取りで データページは読みません これをキースキャンと呼びます ) 例を図 に示します インデクスは以下の複数列インデクス X01(ZSURYO,COL) SELECT ZSURYO, COL FROM ZAIKO WHERE ZSURYO < 100 ; 選択式も 探索条件もインデクス構成列のみ指定すると非常に高速 図 インデクス列のみ選択の例 このことにより 探索条件に通常は指定しない列であっても 複数列インデクスに追加することによってパフォーマンスが向上する場合があります ただし 列サイズが小さく頻繁に使用される場合のみ使用し 更新性能に十分注意してください 21

23 インデクスを有効に使う記述 2-8 行値構成子の利用 (1) Point 複数列の組み合わせにて大小比較する場合は行値構成子を用いる 複数列の大小比較をする場合 以下のような指定を行うとインデクスの使用効率が悪くなります 行値構成子を用いれば インデクスを効率よく利用することができます 複数列を組み合わせての大小比較は and と or の条件を組み合わせることにより記述できますが インデクスの使用効率が悪くなり性能上不利になります 例を図 に示します 連結演算を用いた大小比較が可能であった場合でも インデクスの使用効率が悪くなり性能上不利になります 例を図 に示します 以下の複数列インデクスは定義済み X01(CODE, SUBCODE) CODE SUBCODE の組み合わせにて大小比較する場合 ~ WHERE (CODE, SUBCODE) > (100, 50) ~ WHERE CODE > 100 OR (CODE = 100 AND SUBCODE > 50) (100, 50) よりも大きいものを検索する 行値構成子を使用すると 複数列インデクスで直接評価ができ効率が良い 図 行値構成子の使用例その 1 22

24 インデクスを有効に使う記述 行値構成子の利用 (2) 以下の複数列インデクスは定義済み X02(XDATE, XTIME) XDATE XTIME の組み合わせにて大小比較する場合 ~ WHERE (XDATE, XTIME) > (' ', '223000') (' ', '223000') よりも大きいものを検索する 行値構成子を使用すると 複数列インデクスで直接評価ができ効率が良い ~ WHERE XDATE XTIME > ' ' 図 行値構成子の使用例その 2 連結演算などのスカラ演算を含むとインデクスの使用効率が悪い 23

25 インデクスを有効に使う記述 2-9 完全一致に LIKE は用いない Point 完全一致の検索の場合は LIKE 述語でなく = 述語を用いる LIKE 述語にて完全一致の検索を行う場合は固定長文字列でもデータ長が等しいものしか一致しない ( 空白を補完しない ) ことも認識してください 例を図 に示します 列定義は以下 SNAME CHAR(30) ~ WHERE SNAME = 'ABCD' ; = 述語の場合 列長に合わせて変数の値に空白を補完するため 長さが異なっても検索できる ~ WHERE SNAME LIKE 'ABCD' ; 固定長文字列 SNAMEの長さとLIKE 述語 に指定した文字列の長さが不一致の場合 検索できない 図 LIKE の完全一致は用いない 24

26 インデクスを有効に使う記述 2-10 任意の複数条件を組み合わせた自由検索の注意 Point 任意の複数条件を組み合わせた検索で LIKE 述語を使用して検索条件に汎用性を持たせない LIKE のパターン文字列を変数として 実行時に変数に完全一致の文字列または '%' を与えることにより一つの SQL にて任意の複数条件を組み合わせた自由検索が実現可能ですが インデクスの使用効率が悪くなり性能劣化となるので このような指定は避けてください このような場合は 条件ごとにそれぞれの SQL を記述したり 動的 SQL を組み立てたりして UAP にて使用する SQL を選択してください 例を図 に示します 検索を有効にしたい列を事前に判定し 条件に有効にしたい列だけを指定した SQL で 検索を行う SNAME の条件と SCODE の条件のアドホックな検索において : SNAME の条件だけを有効にしたい場合 ~ WHERE SNAME = :X1 ; SCODE の条件だけを有効にしたい場合 = 述語として不要な条件 (SCODE の条件 ) を指定しない なお SQL オブジェクトキャッシュのヒット率を上げるために定数でなく変数を用いる ~ WHERE SCODE = :X2 ; 図 複数の LIKE 条件を組み合せて使用しないその 1 25

27 インデクスを有効に使う記述 任意の複数条件を組み合わせた自由検索の注意 検索を有効にしたい列に定数を 有効にしない列に % を設定し LIKE を使用した SQL を発行している 有効にしない列も検索対象となるため インデクスの使用効率が悪くなる ~ WHERE SNAME LIKE :X1 AND SCODE LIKE :X2 ; SNAME の条件だけを有効にしたい場合 X1 = 'ABCD' X2 = '%' SCODE の条件だけを有効にしたい場合 X1 = '%' X2 = '1234' 図 複数の LIKE 条件を組み合せて使用しないその 2 26

28 インデクスを有効に使う記述 2-11 NOT(!=) のインデクスの使用上の注意 Point インデクスを使用して範囲が絞り込めるならば NOT(!=) は使用しない インデクスで範囲を絞り込めるように条件の指定ができるならば NOT(!=) を指定しないでください NOT(!=) を使用すると インデクスを使用した検索を行わないことが多いです インデクスを使用するための NOT(!=) に関する例を図 に示します ~ WHERE DNO > 0 DNO に負数がない場合 ~ WHERE DNO!= 0 図 インデクス定義列での NOT(!=) の変形例 インデクスを使用して範囲をあまり絞り込めないなど インデクスを用いたくない場合に NOT(!=) を用いてください 27

29 インデクスを有効に使う記述 ORDER BY 句 GROUP BY 句の 2-12 インデクスソートキャンセル (1) Point ORDER BY 句 GROUP BY 句は インデクスを利用できるように工夫する ORDER BY 句の順序性は インデクスを使用することでソート処理を行わずに保証できるため 性能向上が期待できます また GROUP BY 句に対しても インデクスを使用しソート処理 / ハッシュ処理を行わずにグループ化できるため 性能向上が期待できます これをインデクスソートキャンセルと呼びます インデクスソートキャンセルにするために 以下のすべての条件を満たすようにしてください 1ORDER BY 句 /GROUP BY 句に指定する列のすべてが 同じ順序で一つのインデクスの第 1 構成列から連続しているかまたは連続しない場合には インデクス構成列の連続しない列に = 述語 ( 列 = 値指定 ) または IS NULL 条件列を探索条件に指定している 2ORDER BY 句の ASC/DESC 指定と インデクス定義時の構成列の ASC/DESC 指定が同じか まったく逆 ( 本項目は GROUP BY には該当しない ) 3 インデクスが複数の RD エリアに分割されていない (HiRDB/ パラレルサーバの場合は 1 つのサーバ (BES 内 ) で複数の RD エリアに分割されていない ) < 補足事項 > 探索条件中にインデクス構成列に対する絞り込みがあるか または選択式がインデクス構成列のみで構成されている場合は よりインデクスソートキャンセルを適用できます 28

30 インデクスを有効に使う記述 インデクスソートキャンセル (2) インデクスが複数の RD エリアに分割されていない場合 ORDER BY 句 GROUP BY 句の インデクスソートキャンセルとなる例を図 に示します インデクスは以下の複数列インデクス X01(SNAME ASC, ZSURYO DESC, DNO ASC) SELECT ZSURYO, DNO FROM ZAIKO WHERE SNAME = 'A' ORDER BY ZSURYO DESC, DNO ASC; SELECT ZSURYO, DNO FROM ZAIKO ORDER BY SNAME ASC, ZSURYO DESC, DNO ASC; SELECT ZSURYO, DNO FROM ZAIKO ORDER BY SNAME DESC, ZSURYO ASC, DNO DESC; 図 インデクスソートキャンセルの例 = 述語はインデクスの第 1 構成列を指定 ORDER BY はインデクスの第 2 構成列から連続して指定している 選択式はインデクス構成列のみ ORDER BY 指定列がインデクスの第 1 構成列から連続して指定する ASC/DESC がすべて逆 29

31 インデクスを有効に使う記述 ORDER BY 句 GROUP BY 句の インデクスソートキャンセル (3) インデクスソートキャンセル不可となる例を図 に示します インデクスが複数の RD エリアに分割されていない場合 SELECT ZSURYO, DNO FROM ZAIKO WHERE SNAME = 'A ORDER BY ZSURYO ASC, DNO ASC; SELECT ZSURYO, DNO FROM ZAIKO WHERE SNAME = 'A ORDER BY DNO ASC, ZSURYO ASC; SELECT ZSURYO, DNO FROM ZAIKO WHERE SNAME = 'A ORDER BY DNO ASC; SELECT ZSURYO, DNO FROM ZAIKO ORDER BY SNAME ASC, ZSURYO DESC, DNO ASC, COL ASC ; インデクスは以下の複数列インデクス X01(SNAME ASC, ZSURYO DESC, DNO ASC) 図 インデクスソートキャンセルの不可の例その 1 ASC/DESC が一致しない 2 の条件にあてはまらない例 ORDER BY 指定順序とインデクス構成列順が異なる 1 の条件にあてはまらない例 ORDER BY 指定列がインデクスの第 1 構成列から連続せず 欠落列の = 述語指定もない 1 の条件にあてはまらない例 ORDER BY 指定列にインデクスで定義されてない列がある 1 の条件にあてはまらない例 30

32 インデクスを有効に使う記述 ORDER BY 句 GROUP BY 句の インデクスソートキャンセル (4) 一つのサーバ内でインデクスが複数の RD エリアに分割されている場合 インデクスは 以下 X01(SNAME ASC, ZSURYO DESC, DNO ASC) IN(RDA1, RDA2, RDA3); SELECT SURYO, DNO FROM ZAIKO ORDER BY SNAME ASC, ZSURYO DESC, DNO ASC; インデクスが複数の RD エリアに分割されている 3 の条件にあてはまらない例 図 インデクスソートキャンセルの不可の例その 2 31

33 インデクスを有効に使う記述 2-13 集合関数 MAX/MIN の引数の注意 Point 一つの SQL に 異なる列を引数とする MAX MIN を同時に指定しない ひとつの SQL に異なる列を引数とする集合関数 MAX MIN を同時に指定すると インデクスを使用せず MAX MIN の値を求めるため性能が悪くなります 違う引数の MAX MIN は SQL を分け 引数にインデクスの第 1 構成列を指定してください 例を図 に示します インデクスは X01(ZSURYO, DNO) X02(DNO) SELECT MAX(ZA.ZSURYO) FROM ZAIKO ZA; SELECT MIN(ZA.DNO) FROM ZAIKO ZA; SELECT MAX(ZA.ZSURYO), MIN(ZA.DNO) FROM ZAIKO ZA; 異なる列の MAX と MIN の SQL 文を分けて指定する なお 各列は第 1 構成列となるようにインデクスを定義する 一つの SQL にて MAX と MIN の引数に異なる列を指定している 図 インデクスの構成列を MAX,MIN の引数に指定した例 32

34 3. 副問合せに関する記述 副問合せは SQL の構文ベースでアクセスパス ( 処理手順 ) がほぼ決まるため 副問合せを使用する場合は書き方によって大きく性能が異なります よって 適切に使用するように心掛けてください 33

35 副問合せに関する記述 3-1 副問合せの使用方針 # 方針メリット 副問合せを使用する場合は 以下の順に考慮して使用すると良いです ジョインで記述可能な SQL は副問合せを使用せず ジョインで記述する FROM 句の副問合せは使用しない IN 副問合せ (=ANY 副問合せ ) と EXISTS 副問合せは 絞り込みによって使い分ける IN 副問合せ (=ANY 副問合せ ) と = 副問合せは 副問合せのヒット件数が 1 件かどうかで使い分ける NOT IN 副問合せ (<>ALL 副問合せ ) はなるべく使用しない 検索順序 データの突合せ方法を HiRDB が最適化できるので SQL 構文をあまり考えなくて良い 検索順序 データの突合せ方法 絞り込みのインデクスを HiRDB が最適化できるので SQL 構文をあまり考えなくて良い 絞り込みを伝播できるようになりデータの処理量が削減できる インデクスを効率よく使用できるようになり データの処理量が削減できる NOT を含むとデータ処理量が多くなるが NOT IN は特に重いので避ける 34

36 副問合せに関する記述 3-2 副問合せよりもジョインを使用する (1) Point 副問合せを用いない SQL 文に変更可能な場合 なるべく副問合せを使用しない IN 副問合せ ANY 副問合せ ALL 副問合せでは作業表を作成します また 副問合せだと表の検索順序が限られるため 最も効率の良い順序で表を検索することができず 表の結合で記述したほうが処理の性能が向上することが多いです IN 副問合せ =ANY 副問合せは 結合で記述できます 図 図 に 副問合せを解消できる例を示します SELECT ZA.SNAME FROM JUTYU DE, ZAIKO ZA WHERE DE.DNO = ZA.DNO AND ZA.ZSURYO = 20 ; SELECT ZA.SNAME FROM ZAIKO ZA WHERE DNO IN ( SELECT DE.DNO FROM JUTYU DE) AND ZA.ZSURYO = 20 ; 図 副問合せを使用しない SQL 例その 1 副問合せを使用しないで 表結合で実現 (DE.DNO の値に重複がある場合は注意が必要 ) 副問合せを使用すると 作業表オーバヘッド さらにインデクスが使えなければ直積相当の負荷がかかる ZAIKO 表を先に検索して絞り込みを伝播させた方が良いが JUTYU 表を絞り込まずに先に検索してしまう 35

37 副問合せに関する記述 副問合せよりもジョインを使用する (2) SELECT ZA.SNAME FROM JUTYU DE, ZAIKO ZA WHERE DE.DNO = ZA.DNO AND DE.TCODE = 'A' ; 副問合せを使用しないで 表結合で実現 (DE.DNO の値に重複がある場合は注意が必要 ) SELECT ZA.SNAME FROM ZAIKO ZA WHERE EXISTS ( SELECT * FROM JUTYU DE WHERE DE.DNO = ZA.DNO AND DE.TCODE = 'A') ; 外への参照あり副問合せでは 外側問合せを先に検索する ゆえに 外側問合せにデータの絞り込みが無ければ 表の全件の突合せが実施され負荷が高い 図 副問合せを使用しない SQL 例その 2 36

38 副問合せに関する記述 3-3 FROM 句の副問合せの使用上の注意 (1) Point FROM 句の副問合せはなるべく用いない FROM 句の副問合せを指定すると 内部導出表を作成することが多くなります 内部導出表を作成した場合 以下のような点で性能が悪くなるため FROM 句の副問合せはなるべく用いないでください 例を図 に示します 内部導出表は FROM 句の副問合せ結果で作成する作業表であるため 作業表への I/O が発生する 内部導出表を作成すると 外側問合せに指定した探索条件は FROM 句の副問合せ結果で作成する作業表の作成後に評価するため インデクスが用いられない SELECT B.SNAME FROM JUTYU A, ZAIKO B WHERE A.DNO = B.DNO AND A.TCODE = 'A' ; DNO のインデクスを用いたネストループジョインとなる SELECT B.SNAME FROM (SELECT DNO, TCODE FROM JUTYU WHERE TCODE='A') A, (SELECT DNO, SNAME FROM ZAIKO) B WHERE A.DNO = B.DNO ; 図 FROM 句に副問合せを使用しない SQL 例 内部導出表を作成する DNO にインデクスを定義していても使用しない 37

39 副問合せに関する記述 FROM 句の副問合せの使用上の注意 (2) FROM 句の副問合せの書き換えで性能向上した例を図 に示します SELECT P.* FROM TBL2 T2, (SELECT T1.*, VALUE(T1.C1S, T1.C1L, 0) C1 FROM TBL1 T1 ) P WHERE T2.TBL1ID = P.ID AND P.C1 BETWEEN T2.C2 AND T2.C3 AND T2.TBL2ID =? マージジョイン FROM 句の副問合せ 作業表相手だとマージジョインのみ 内部導出表 SELECT T1.*, VALUE(T1.C1S, T1.C1L, 0) C1 FROM TBL2 T2, TBL1 T1 WHERE T2.TBL1ID = T1.ID AND VALUE(T1.C1S, T1.C1L, 0) BETWEEN T2.C2 AND T2.C3 AND T2.TBL2ID =? ネストループジョイン 演算は展開する TBL2 作業表 P 絞り込まれず全件検索 TBL2 TBL1 TBL2ID =? で絞り込んだが絞り込みを伝播できず性能劣化 TBL1 TBL2ID =? で絞り込んだ絞り込みを伝播 実表の検索であれば 結合条件のインデクスで絞り込んで検索 図 FROM 句の副問合せの書き換えでの性能向上例 38

40 副問合せに関する記述 3-4 IN 副問合せと EXISTS の使い分け Point 副問合せ内を絞り込める場合は 外への参照なし IN 副問合せを使用する副問合せより外側問合せが絞り込める場合は 外への参照あり EXISTS を使用する 副問合せで記述する場合には 外への参照あり / なしによって 外側問合せと副問合せのどちらを先に検索するかが変わります 外への参照ありは外側問合せを先に 外への参照なしは副問合せを先に検索します そのため 絞り込める問合せを先に検索するように 外への参照あり / なしを考える必要があります 外への参照ありで記述する場合は EXISTS 述語の副問合せを使用してください 外への参照なしで記述する場合は IN 述語の副問合せを使用してください 例を図 に示します SELECT ZA.SNAME FROM ZAIKO ZA WHERE ZA.DNO IN ( SELECT DE.DNO FROM JUTYU DE WHERE DE.TCODE = 'A') ; SELECT ZA.SNAME FROM ZAIKO ZA WHERE EXISTS ( SELECT * FROM JUTYU DE WHERE DE.DNO = ZA.DNO) AND ZA.SNAME = 'A' ; 外への参照無し IN の場合は ZA.DNO にインデクスを定義して 副問合せから外側問合せへ突き合わせる 副問合せ内が絞り込める場合は 外への参照なし IN にて 副問合せを先に検索したほうが良い DE.DNO にインデクスを定義して 外側問合せから副問合せへ突き合わせる 外側問合せが絞り込める場合は 外への参照あり EXISTS にて 外側問合せを先に検索したほうが良い 図 外への参照なし IN と 外への参照あり EXISTS の使い分け 39

41 副問合せに関する記述 IN 副問合せと EXISTS の使い分け ( 解説 ) 解説 外への参照有無により 先に検索する表が変わります 絞り込める表から検索できるように 外への参照有無を使い分けます 外への参照無し IN 副問合せ SELECT ZA.SNAME FROM ZAIKO ZA WHERE ZA.DNO IN ( SELECT DE.DNO FROM JUTYU DE WHERE DE.TCODE = 'A' ) ; DNO ZAIKO 作業表 2 外側問合せ検索 TCODE='A' TCODE JUTYU 1 副問合せ検索 外への参照あり EXISTS 副問合せ SELECT ZA.SNAME FROM ZAIKO ZA WHERE EXISTS ( SELECT * FROM JUTYU DE WHERE DE.DNO = ZA.DNO) AND ZA.SNAME = 'A' ; SNAME='A' SNAME DNO ZAIKO JUTYU 1 外側問合せ検索 2 副問合せ検索 40

42 副問合せに関する記述 3-5 IN 副問合せと = 副問合せの使い分け Point 副問合せ内で 1 件しかヒットしない場合は = 副問合せを使用する 主キーを探索条件の = 条件で指定する場合など 副問合せ結果が 1 件であることが自明な場合は IN 副問合せ (=ANY 副問合せも同様 ) を使用せず = 副問合せを使用してください = 副問合せであれば 作業表の作成が不要なこととインデクスが自由に使用できることから 高速化できます 例を図 に示します JUTYU 表の主キー :JUTYU(TCODE) SELECT ZA.SNAME FROM ZAIKO ZA WHERE ZA.DNO = ( SELECT DE.DNO FROM JUTYU DE WHERE DE.TCODE = 'A' ) ; ZA.DNO にインデクスを定義して 副問合せから外側問合せへ突き合わせる SELECT ZA.SNAME FROM ZAIKO ZA WHERE ZA.DNO IN ( SELECT DE.DNO FROM JUTYU DE WHERE DE.TCODE = 'A' ) ; 図 IN 副問合せと = 副問合せの使い分け 副問合せが 1 件しかヒットしないときは IN を使用せず = を使用する 主キーであるので 1 件しかヒットしない 41

43 副問合せに関する記述 IN 副問合せと = 副問合せの使い分け ( 例 ) CREATE VIEW VIEW1 AS 1 件しかヒットしな SELECT * FROM TBL1 いので=でよい WHERE CCODE2 = (SELECT CCODE2 FROM TBL2 WHERE CNAME = 'NAME1') ; 主キー CREATE VIEW VIEW1 AS SELECT * FROM TBL1 WHERE CCODE2 IN (SELECT CCODE2 FROM TBL2 WHERE CNAME = 'NAME1') ; SELECT T3.CID AS C1_ 主キー FROM TBL3 T3 INNER JOIN VIEW1 T1 ON T3.CCODE1 = T1.CCODE1 WHERE ( T3.CID = 'A01' ) ; IN 副問合せではネストループジョインと同時に評価できず 探索範囲が広がる TBL3 TBL1(CCODE1, CCODE2) のインデクスネストループジョイン インデクスで大量データがヒットし性能劣化 TBL1 ビュー表定義を = 副問合せに変更して インデクスでの絞り込みができるようにした 図 IN 副問合せと = 副問合せの使い分け例 42

44 副問合せに関する記述 3-6 NOT IN の代用としての NOT EXISTS の使用 Point なるべく NOT IN 副問合せよりも NOT EXISTS 副問合せを用いる 表の結合では表現できないものは 副問合せで記述します 副問合せを使用するときは なるべく外への参照を行わないようにするのが望ましいですが 外への参照を行わなくても NOT IN の場合は内部的な直積が発生するため注意が必要です 処理性能の向上のためには NOT IN を用いるよりも 外への参照をしてでも NOT EXISTS で置き換えた方が良いことが多いです 基本的には NOT IN を使用しないようにしますが 下記例で SNAME='A' が絞り込めず かつ副問合せの検索行数が極端に少ない場合は NOT IN を用います 絞り込める場合は NOT EXISTS を使用します ただし このような検索は一般的に処理負荷が高いのでなるべく避けるのが望ましいです SELECT ZA.SNAME FROM ZAIKO ZA WHERE NOT EXISTS ( SELECT * FROM JUTYU DE WHERE DE.DNO = ZA.DNO) AND ZA.SNAME = 'A' ; 小さく絞り込める場合 SELECT ZA.SNAME FROM ZAIKO ZA 副問合せ検索行数が少ない WHERE ZA.DNO NOT IN ( SELECT DE.DNO FROM JUTYU DE) AND ZA.SNAME = 'A' ; あまり絞り込めない場合 図 外への参照なし NOT IN と 外への参照あり NOT EXISTS の使い分け 43

45 4. 結合検索に関する記述 結合検索を使用する場合 書き方によっては処理負荷が高くなります 処理負荷が高くならないようにする SQL コーディングについて示します 44

46 結合検索に関する記述 4-1 表の結合 (1) Point 表の結合は 次の点に注意してください 不必要な表を結合しない 結合条件は =( 等号 ) 条件を指定する 結合条件にスカラ演算等の演算を使用しない 結合条件を OR 論理演算しない HiRDB/ パラレルサーバの外結合は 表の分割列を結合条件に指定するようにする 表の結合で 処理負荷がかからないように 以下に示すように指定してください 1 結合処理は 一般的に結合表数が増えるほど処理負荷が高くなるので 結合する表数は少なくなるように工夫する 2 表の結合は ネストループジョインになるように設計する あまり絞り込まないで結合を行うことが必要な場合は ハッシュジョインになるよう設計する 極力直積 マージジョインにならないようにする これらは 外結合 (LEFT OUTER JOIN) にも該当する 3 結合条件にはデータを絞り込めるように =( 等号 ) 条件を指定する 4 結合条件にスカラ演算等の演算を使用しないようにする スカラ演算等は直積で処理するため処理負荷が高くなる 5 結合条件をOR 論理演算しないようにする OR 論理演算すると直積で処理するため 処理負荷が高くなる 6 絞り込める条件の列と 対する表の結合条件の列にインデクスを定義する 7HiRDB/ パラレルサーバで外結合を行う場合は 表の分割列を結合条件に指定するようにする 分割列を結合条件に指定しないと ネストループジョインにならなくなる (HiRDB/ シングルサーバ およびHiRDB/ パラレルサーバでも非分割表の場合は問題ない ) 45

47 結合検索に関する記述 表の結合 (2) 結合条件を OR 論理演算しないようにする例を図 に示します 図 に示す方法が適用できない場合は 集合演算 (UNION ALL) を用いる方法も検討する SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO = ZA.DNO AND (ZA.ZSURYO = 0 OR ZA.SNAME = 'A') ; 結合条件を OR 論理演算の外へ括り出す SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE (JU.DNO = ZA.DNO AND ZA.ZSURYO = 0) OR (JU.DNO = ZA.DNO AND ZA.SNAME = 'A') ; 結合条件を OR 論理演算している 図 直積を回避するために結合条件を OR の外へ括り出す例 46

48 結合検索に関する記述 4-2 外結合と内結合の混在 SQL での注意 (1) Point 外結合と内結合を混在する場合には内結合は INNER JOIN 構文で記述するかつ探索条件にて最も絞り込める表を FROM 句の最初に指定する 外結合と内結合の混在 SQL で以下を指定した場合 データが効率的に絞り込めません FROM にカンマで区切り表を書き並べて結合するものと LEFT OUTER JOIN を混在して指定した場合 LEFT OUTER JOIN が先に処理される 探索条件にて絞り込む表が LEFT OUTER JOIN の外表以外であった場合 LEFT OUTER JOIN の外表を最初に検索するため 表のデータが絞り込めない状態で LEFT OUTER JOIN 処理を行うので遅くなる 上記の場合 内結合を INNER JOIN 構文で記述し 探索条件にて絞り込む表を FROM 句の最初に指定します 絞り込んだ表を最初に検索し 少ない行数で結合処理を行うため高速に処理できます なお INNER JOIN 構文 LEFT OUTER JOIN 構文では FROM 句の指定順に結合します 47

49 結合検索に関する記述 外結合と内結合の混在 SQL での注意 (2) 外結合と内結合の混在 SQL でデータを効率的に絞り込める例を図 に示します SELECT A.SURYO, B.SNAME, C.ZSURYO FROM JUTYU A INNER JOIN SYOHIN B ON A.DNO = B.DNO LEFT OUTER JOIN ZAIKO C ON B.DNO = C.DNO WHERE A.TCODE = 'A' ; INNER JOIN にすることで FROM 句の記述順に結合する よって 最初に JUTYU 表を TCODE='A' にて絞り込んで検索する SELECT A.SURYO, B.SNAME, C.ZSURYO FROM JUTYU A, SYOHIN B LEFT OUTER JOIN ZAIKO C ON B.DNO = C.DNO WHERE A.DNO = B.DNO AND A.TCODE= 'A' ; カンマで書き並べた JUTYU 表は LEFT OUTER JOIN の後に結合する LEFT OUTER JOIN を先に処理するため SYOHIN 表を絞り込まないで最初に検索する 図 外結合と内結合の混在 SQL 例 48

50 結合検索に関する記述 4-3 外結合の使用上の注意 Point LEFT OUTER JOIN の内表は ON 条件中にて絞り込む LEFT OUTER JOIN の内表を WHERE 句で絞り込むと (NULL 述語は除く ) INNER JOIN と同じ結果になります また 内表の条件を WHERE 句に指定するとインデクスを使用出来ず 性能が悪くなります ゆえに LEFT OUTER JOIN の内表は ON 条件中で絞り込む必要があります 例を図 に示します SELECT A.SNAME, B.SURYO FROM SYOHIN A LEFT OUTER JOIN JUTYU B ON A.DNO = B.DNO AND B.SURYO > 0 WHERE A.SNAME = 'A' ; SELECT A.SNAME, B.SURYO FROM SYOHIN A LEFT OUTER JOIN JUTYU B ON A.DNO = B.DNO WHERE A.SNAME = 'A' AND B.SURYO > 0 ; 等価なSQL 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 ; 図 LEFT OUTER JOIN 内表の絞り込み 内表は ON 条件中にて絞り込むインデクスを使用する 内表を WHERE 句で絞り込んでいるインデクスが使用されない INNER JOIN と同じ結果になる 49

51 5. 表の分割に関する記述 分割表を使用することで性能向上が図れます この利点を活かす SQL コーディングについて示します 50

52 表の分割に関する記述 5-1 表の分割とは 解説 表の分割とは 一つの表を特定の列の値を基に複数の領域へ分割して格納し 管理する方法です 分割した表を分割表といい 表を分割するときに指定した特定の列を分割キーといいます SQL 実行時は 探索条件に分割キーを指定すると対象となるデータが格納されている領域を判定し 必要な領域にのみアクセスします 注文日による表の分割の例 分割キー 注文日注文コード商品コード数量 注文履歴表 RDAREA1 ~' ' RDAREA2 ' ' ~' ' RDAREA3 ' ' ~' ' RDAREA4 ' ' ~' ' RDAREA5 ' '~ アプリケーション側では 表の分割 / 非分割を意識しなくてもアクセス可能ですが 分割キーによるアクセス範囲と ( パラレルサーバの )BES 間データ転送方法 (5-1-1 参照 ) を意識することで性能を向上できます 例 ) SELECT 商品コード, 数量 FROM 注文履歴表 WHERE 注文日 = ' ' 検索対象の RD エリアは RDAREA3 のみとなる 表の分割の詳細につきましては マニュアル システム導入 設計ガイド ー 表の設計 を参照してください 51

53 表の分割に関する記述 BES 間データ転送方法 ( パラレルサーバ ) 解説 パラレルサーバで表の結合する際 BES 間のデータの転送をともないます 分割表の結合では 表の分割キーを結合キーに含むことで 効率よく処理できます BES 間データ転送方法の種類 1 対 1 転送 ( 1 TO 1 ) キーレンジ転送 (KEY RANGE) ハッシュ転送 (HASH) ブロードキャスト転送 (BROADCAST) 転送元サーバサーバサーバサーバサーバサーバ 方式 転送先 サーバ サーバ 常に同じ転送先のサーバにデータを転送 サーバ サーバ 分割キーによって転送先サーバを決定 サーバ サーバ すべての転送先サーバにデータをコピーして転送 転送方法の条件 下記の条件をすべて満たす場合 両方の表の分割キー 分割の種類 分割条件 格納先 BES が完全に一致している 両方の表の分割キーが結合キーに含まれている 下記の条件をすべて満たす場合 データ転送先の表がキーレンジ分割表またはハッシュ分割表 転送先の表の分割キーが結合キーに含まれている 分割キーが 結合キーに含まれていない 注 : 分割数が多く 転送元のヒット件数が多いほど 通信および結合オーバヘッドが大きくなり 性能が悪くなる 52

54 表の分割に関する記述 5-2 分割した表に対する検索 RD エリアの特定 Point 分割列に対する探索条件はスカラ演算しない HiRDB は 分割列に対する探索条件が指定された場合には 探索条件に合致するデータが格納された RD エリアを特定して他の RD エリアは検索しないようにすることで性能向上しています しかしながら 分割列に対する探索条件がスカラ演算された場合には 該当表を格納した全 RD エリアを検索するようになり性能向上できません 例を図 に示します ZAIKO 表の分割列が SNAME であった場合 SELECT DNO FROM ZAIKO WHERE SNAME =? ; SELECT DNO FROM ZAIKO WHERE SNAME = CAST(? AS CHAR(5)) ;? パラメタには CHAR(5) に変換した値を入れ CAST 指定を行わない SELECT DNO FROM ZAIKO WHERE SUBSTR(SNAME,1,3) = 'ABC' ; 図 分割列に対する探索条件 53

55 表の分割に関する記述 5-3 結合検索時の検索 RD エリアの特定 Point 結合検索時には分割列に対する探索条件は省略しないで冗長に記述する 一方の表を表の分割列で絞り込み もう一方の表と表の分割列同士で結合した場合でも もう一方の表は全 RD エリアにアクセスします もう一方の表も冗長に表の分割列に対する探索条件を指定することで 両表のアクセスする RD エリアを特定して絞り込むことができるため性能向上します 例を図 に示します JUTYU 表 ZAIKO 表ともに DNO が分割列の場合 SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO = ZA.DNO AND JU.DNO = 10 AND ZA.DNO = 10 ; ZA.DNO の条件を冗長に指定することで ZAIKO 表は一つの RD エリアだけを検索する SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO = ZA.DNO AND JU.DNO = 10 ; 図 分割列に対する探索条件 ZAIKO 表は定義した全 RD エリアを検索する可能性がある 54

56 表の分割に関する記述 < パラレル限定 > 5-4 結合検索での表の分割列と結合条件列の関係 Point 結合検索時に表の分割列で結合できるように表を設計する特に LEFT OUTER JOIN の場合は内表の分割列で結合できるように表を設計する HiRDB/ パラレルサーバにおいて表の結合検索を行う場合 以下に示すように指定してください = 述語の結合条件に表の分割列を含むようにする 各行の結合相手のデータがどの BES * に格納されているか特定できるため高速に処理できる 大量データを保持する表は 分割列を揃えるだけでなく 表の分割数と格納 BES を揃える 結合条件に表の分割列を含まない場合は 以下のような性能低下を招きます 各行の結合相手のデータがどの BES に格納されているかを特定できないため一つの行に対する結合処理を結合相手の表を格納した全 BES コピー転送 (BROAD CAST と呼ぶ ) して実行するようになるので パラレルの効果が得られず分割損が起きる LEFT OUTER JOIN の場合は 外表を全行返すという SQL の仕様上 BROAD CAST が行えなくなり 両方の表の結合列での再配置を行うので BES 間のデータ転送量が増える さらに両方の表の再配置を行うと結合列でのインデクス検索が行えないのでネストループジョイン以外の結合方式となり性能低下を招く 例を図 に示します * DB アクセスサーバ (Back End Server) HiRDB/ パラレルサーバの構成要素の一つです DB へのアクセスや排他制御を実行します 55

57 表の分割に関する記述 < パラレル限定 > 結合検索での表の分割列と結合条件列の関係 JUTYU 表 ZAIKO 表ともに DNO が分割列で ZAIKO 表の DNO と CNO にインデクスが定義されている場合 SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO = ZA.DNO AND JU.CNO = 10 ; SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.CNO = ZA.DNO AND JU.CNO = 10 ; SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO = ZA.CNO AND JU.CNO = 10 ; SELECT ZA.NAME FROM JUTYU JU LEFT OUTER JOIN ZAIKO ZA ON JU.DNO = ZA.CNO WHERE JU.CNO = 10 ; 分割列同士で結合する ( さらに表の分割方法が同じなら ) 1TO1 転送となり最も処理効率が良い 転送先の表の結合列に分割列を含む JUTYU 表のデータを ZAIKO 表の分割に合わせてキーレンジ転送 またはハッシュ転送し効率が良い 転送先の表の結合列に分割列を含まない JUTYU 表データの BROAD CAST 転送が発生し 負荷が高くなる 外結合の転送先の表の結合列に分割列を含まない マージジョインとなり 両表のデータ転送 ZAIKO 表の全件検索 作業表作成 ソート処理が発生し 負荷が高くなる 図 分割列に対する探索条件 56

58 6. DB の件数を考慮した記述 DB アクセス性能は 検索結果件数および検索中 (SQL 実行中 ) にアクセスするデータ件数に大きく依存します この場合の SQL コーディングについて示します 57

59 DB の件数を考慮した記述 6-1 表の件数の取得 Point 表の件数を求めるとき COUNT(*) を使用すること 表の件数を求めるときは 以下を指定してください COUNT(*) を使う このとき可能な限り WITHOUT LOCK NOWAIT を指定する 条件式にはインデクスの定義された列を指定する 例を図 に示します 条件式に指定した列がインデクスの第一構成列でない場合 性能が悪くなることがあります SELECT COUNT(*) FROM ZAIKO WHERE ZSURYO > 10 WITHOUT LOCK NOWAIT ; 件数の取得には COUNT(*) を使用する ZSURYO にインデクスを定義する 図 件数の取得の SQL 例 58

60 DB の件数を考慮した記述 6-2 データの存在有無の取得 Point データの存在チェックには LIMIT を使用すること データの存在チェックを行うときの留意事項を以下に記載します LIMIT 1 を指定して 1 件見つけたら処理を打ち切るようにする 可能な限り WITHOUT LOCK NOWAIT を指定する 条件式と選択式にはインデクスの定義された列を指定する ORDER BY は作業表を作成することがあるため 指定しない 例を図 に示します SELECT ZA.ZSURYO FROM ZAIKO ZA WHERE ZA.ZSURYO = 0 LIMIT 1 WITHOUT LOCK NOWAIT ; ZSURYO にインデクスを定義する 図 存在チェックの SQL 例 59

61 DB の件数を考慮した記述 6-3 NOT(!=) の使用上の注意 Point 絞り込めないとわかっている条件は NOT(!=) を指定する NOT(!=) を使用した条件に対して HiRDB は あまり絞り込めないと判断し結合方法 結合順序を決定します 取り得る値が 1 か 0 だけのフラグなど 2 値しか持たない列は 条件に指定してもあまり絞り込めないので NOT(!=) を使用して条件を指定することで HiRDB は 絞り込めないことを認識できます 3 値以上持つがあまり絞り込めない場合は NOT IN を用いても良いです 例を図 に示します ~ FROM JUTYU JU,ZAIKO ZA WHERE JU.DNO = ZA.DNO AND JU.FLAG!= 1 AND ZA.ZSURYO = 20 JU.FLAG!= 1 とすることで ZA.ZSURYO = 20 のインデクスを確実に使用し ZA から JU へのネストループジョインにて高速に処理する ~ FROM JUTYU JU,ZAIKO ZA WHERE JU.DNO = ZA.DNO AND JU.FLAG = 0 AND ZA.ZSURYO = 20 JU.FLAG は 1 か 0 であり かつ ZA.ZSURYO=20 が絞り込める場合 図 結合を伴う SQL での NOT 使用例 60

62 DB の件数を考慮した記述 6-4 集合演算の使用上の注意 (1) Point 各問合せ指定の述語に指定する値だけが異なるような場合は 集合演算を使用しないようにする UNION/UNION ALL などの集合演算を使用したとき 集合演算で区切られた問合せ指定 (SELECT 文 ) は 別々に表アクセスします また 集合演算を使用すると 作業表を作成することが多いです (UNION ALL のみの集合演算であれば集合演算のための作業表は作成しない ) そのため 集合演算を用いない SQL 文にすると処理性能が向上することが多いです 図 に 単純な場合の例を示します SELECT SNAME FROM ZAIKO WHERE ZSURYO IN (10, 20) ; IN 述語を使用することにより集合演算を使用しない SELECT SNAME FROM ZAIKO WHERE ZSURYO = 10 UNION SELECT SNAME FROM ZAIKO WHERE ZSURYO = 20 ; = 条件の値だけが異なる場合は UNION 等の集合演算を使用しない 図 集合演算を使用しない SQL 文の例 61

63 DB の件数を考慮した記述 集合演算の使用上の注意 (2) Point 結合を伴う SQL で 結合条件を OR 論理演算する必要がある場合は 集合演算を使用する 結合条件を OR 論理演算すると HiRDB は 直積で処理します 直積では 全データの突合せ処理を伴うため 集合演算に変形し OR 論理演算を不要とすることで直積処理が無くなり処理性能が向上することが多いです 例を図 に示します SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO = ZA.DNO UNION ALL SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.ZNO = ZA.ZNO AND JU.DNO!= ZA.DNO ; UNION ALL を利用し 結合条件の OR をなくす UNION ALL で処理できるように工夫する SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE (JU.DNO = ZA.DNO OR JU.ZNO = ZA.ZNO) ; DISTINCT 無し 結合条件を OR 論理演算している 図 直積を回避するために UNION ALL を利用する SQL 文の例 62

64 DB の件数を考慮した記述 集合演算の使用上の注意 (3) SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.TCODE = 'A01' AND JU.DNO = ZA.DNO UNION SELECT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.TCODE = 'A01' AND JU.SURYO = ZA.ZSURYO ; UNION を利用し 結合条件の OR をなくす UNION では重複を排除するため DISTINCT の指定が不要 SELECT DISTINCT ZA.NAME FROM JUTYU JU, ZAIKO ZA WHERE JU.TCODE = 'A01' AND (JU.DNO = ZA.DNO OR JU.SURYO = ZA.ZSURYO) ; DISTINCT 指定有り 結合条件を OR 論理演算している 図 直積を回避するために UNION を利用する SQL 文の例 63

65 DB の件数を考慮した記述 6-5 DISTINCT の使用上の注意 Point DISTINCT は 確実に重複があり 重複を排除する必要がある場合以外使用しない DISTINCTは重複排除のために作業表作成とソートを行います そのオーバヘッドがあるので 必要のないDISTINCTは使用しないでください 重複排除が必要な場合でも 選択式が列指定のみで かつ値の重複が多い場合は GROUP BYを用いてください 例を図 6-5-1に示します GROUP BYを用いた場合 以下の向上が図れます インデクスが定義されていれば インデクスを利用して 重複排除を効率よく行える インデクスを利用できなくても グループ分け高速化機能 * (SQL 最適化オプション ) が適用できれば 処理性能が向上することが多い * SQL の GROUP BY 句を指定してグループ分け処理をする場合 ソートしてからグループ分けをしています これにハッシングを組み合わせてグループ分けすることで高速なグループ分け処理が実現できます SELECT SNAME FROM ZAIKO GROUP BY SNAME ; SELECT DISTINCT SNAME FROM ZAIKO ; 選択式が列のみで 重複が多い場合の重複排除は GROUP BY を用いる 不要な DISTINCT は使用しない 図 重複排除を効率よく行うSQL 文の例 < 補足事項 > GROUP BYを使用する場合 重複排除した結果の行数が1024( クライアント環境定義のPDAGGRデフォルト値 ) を超えるならば PDAGGRに1024より大きい値を指定すると処理性能が向上する場合があります 64

66 DB の件数を考慮した記述 6-6 ビュー表の使用上の注意 (1) Point ビュー表定義で DISTINCT 指定 GROUP BY 指定は注意が必要ビュー表定義で結合表 (LEFT OUTER JOIN/INNER JOIN) 指定は注意が必要 ビュー表定義に DISTINCT GROUP BY 結合表を指定すると 内部導出表を作成することが多くなります ( 内部導出表の作成条件は マニュアル SQL リファレンス を参照 ) ビュー表定義で内部導出表を作成した場合 以下のような点で性能が悪くなります 内部導出表は ビュー定義時の導出問合せ式の結果で作成する作業表であるため 作業表への I/O が発生する 内部導出表を作成すると ビュー表検索時に指定した探索条件は 内部導出表の作成後に評価するため 内部導出表作成時の処理件数が多くなり性能が悪くなる これらは ビュー表だけでなく WITH 句を含めた名前つき導出表すべてに該当します 例を図 に示します 65

67 DB の件数を考慮した記述 ビュー表の使用上の注意 (2) CREATE VIEW V1(DNO, TCODE) AS SELECT DNO, TCODE FROM JUTYU ; SELECT DISTINCT ZA.SNAME FROM V1 V, ZAIKO ZA WHERE V.DNO = ZA.DNO AND V.TCODE = 'A' ; 重複排除が必要な場合は VIEW の外に記述する 内部導出表とならないため この条件は DISTINCT 処理前に評価できる CREATE VIEW V1(DNO,TCODE) AS SELECT DISTINCT DNO,TCODE FROM JUTYU ; SELECT ZA.SNAME FROM V1 V, ZAIKO ZA WHERE V.DNO = ZA.DNO AND V.TCODE = 'A' ; DISTINCT を指定すると内部導出表となる この条件は DISTINCT 処理後に評価する 図 内部導出表とならないビュー表の例その 1 66

68 DB の件数を考慮した記述 ビュー表の使用上の注意 (3) CREATE VIEW V1(SCODE,TCODE) AS SELECT ZA.SCODE, JU.TCODE FROM JUTYU JU, ZAIKO ZA WHERE JU.DNO= ZA.DNO ; SELECT ZA2.SNAME FROM V1 V, ZAIKO2 ZA2 WHERE V.SCODE = ZA2.SCODE AND V.TCODE = 'A' ; ビュー定義では INNER JOIN を使用しない 内部導出表とならないため ビュー定義時の結合処理前に評価できる CREATE VIEW V1(SCODE,TCODE) AS SELECT ZA.SCODE, JU.TCODE FROM JUTYU JU INNER JOIN ZAIKO ZA ON JU.DNO= ZA.DNO ; SELECT ZA2.SNAME FROM V1 V, ZAIKO2 ZA2 WHERE V.SCODE = ZA2.SCODE AND V.TCODE = 'A' ; INNER JOIN を指定すると内部導出表となる場合がある ビュー定義時の INNER JOIN 処理後に評価する 図 内部導出表とならないビュー表の例その 2 67

69 7. 排他に関する記述 HiRDB では検索に対しても共用モードの排他を取得します 不要な排他は取得しないように排他オプションを指定すると性能向上に結びつきます 本章では 排他オプションの適切な指定について記述します 68

70 排他に関する記述 7-1 排他制御 (1) Point 排他オプションはなるべく記述すること 各表の利用方法を考慮し SQL 文ごとに排他制御の記述を行ってください 検索式ごとに排他方法は必ず検討してください 排他オプションの指定がない場合 PDISLLVL に指定されているデータ保証レベルに従います PDISLLVL が省略されていた場合 WITH SHARE LOCK が仮定されるため 他のユーザが更新するとき更新待ち状態になることがあります 排他オプションは 可能な限り WITHOUT LOCK NOWAIT( 排他無し ) を使用し 排他は極力行わないでください 排他オーバーヘッドの削減 (HiRDB 内処理量および排他待ちの軽減 ) となります ただし 一般に検索した行を必ず更新する場合には 検索時に排他を掛けます 例を図 に示します 69

71 排他に関する記述 排他制御 (2) SELECT DNO FROM ZAIKO WITHOUT LOCK NOWAIT ; SELECT DNO FROM ZAIKO WITHOUT LOCK WAIT; SELECT DNO FROM ZAIKO WITH SHARE LOCK; SELECT DNO FROM ZAIKO WITH EXCLUSIVE LOCK; READ UNCOMMITED: 検索したデータを同時に他のユーザが参照 更新可能である COMMIT してないデータを参照できるため ダーティリードが発生する場合がある READ COMMITED: 一度検索したデータを他のユーザからの更新を許す 同一トランザクションで同じデータを再検索しない場合に指定する COMMIT したデータを参照するため ダーティリードが発生しない REPEATABLE READ: 一度検索したデータをトランザクション終了まで 他のユーザからの参照を許すが更新を許さない 検索したデータの再検索を行う場合に指定する REPEATABLE READ: 一度検索したデータをトランザクション終了まで 他のユーザからの参照も更新も許さない 検索したデータを同一トランザクション内で更新する場合に指定する SELECT DNO FROM ZAIKO; 排他オプションの指定がないため PDISLLVL に指定されているデータ保証レベルに従う PDISLLVL が省略されていた場合 WITH SHARE LOCK が仮定されるため 他のユーザが更新するとき更新待ち状態になることがある 図 排他制御オプション 70

72 排他に関する記述 7-2 更新順序の統一 Point 表の更新順序を決めること デッドロックを避けるため 複数の表を更新する場合はシステム内で更新順序を決めてアクセスしてください 例を図 に示します 更新の順序を決めてデッドロックを避ける A 表 B 表 C 表の順番と決めた場合処理 1:A 表更新 B 表更新 C 表更新処理 2:A 表更新 C 表更新処理 3: B 表更新 C 表更新 A 表 B 表 C 表の順番と更新順序を決めた場合 更新の順序を決めてないため 処理 1と処理 3がB 表の同一行を更新する場合とC 表の同一行を更新する場合は デッドロックになる可能性がある処理 1:A 表更新 C 表更新 B 表更新 処理 2:A 表更新 C 表更新処理 3: B 表更新 C 表更新 B 表と C 表の更新順序が不統一 図 表の更新順序 71

73 排他に関する記述 7-3 表単位の排他 Point LOCK 文は 他のトランザクションからの操作を防ぎたい場合に指定を検討する大量更新する場合は 表の操作が単独の実行であっても LOCK 文の指定を検討する LOCK 文は 表単位で他のトランザクションからの検索や更新を抑止できます このため 他のトランザクションからの操作を防ぎたい場合に指定を検討します 同時実行性は失われますが デッドロックの発生を防ぐことができます 大量更新する場合 LOCK 文は行単位の排他より 排他オーバーヘッドや排他資源の節約ができます このため 他のトランザクションが同じ表を操作しないときでも LOCK 文を指定することを検討してください 検索時は SHAREモードで 更新時は EXCLUSIVEモードで表にロックを掛けます 例を図 7-3-1に示します トランザクション開始 LOCK TABLE JUTYU IN EXCLUSIVE MODE ; DELETE FROM JUTYU WHERE JDATE < ' ' ; LOCK 文を発行する 更新時は IN EXCLUSIVE MODE 参照時は IN SHARE MODE ( 注 )SQL Executer などの自動コミットは解除しておく必要がある トランザクション開始 DELETE FROM JUTYU WHERE JDATE < ' ' ; 図 LOCK TABLE 文の使用 大量削除などの大量更新により 排他資源が枯渇しエラーとなる 72

74 排他に関する記述 7-4 FOR UPDATE の使用上の注意 Point 排他取得する目的では FOR UPDATE でなく WITH EXCLUSIVE LOCK を指定する FOR UPDATE は カーソルを使って更新するための検索 または更新中の表を検索するために指定するオプションです 通常は 暗黙的に EXCLUSIVE の排他が掛かりますが クライアント環境変数 PDISLLVL の指定によっては EXCLUSIVE の排他がかからない場合があるので FOR UPDATE を排他オプションの代用にはしないでください 例を図 に示します SELECT C2 FROM T1 WHERE C1 > 0 WITH EXCLUSIVE LOCK ; SELECT C2 FROM T1 WHERE C1 > 0 WITH EXCLUSIVE LOCK FOR UPDATE ; 排他取得だけが目的の場合は 排他オプションのみを指定する 更新前提で排他取得する場合は 排他オプションと FOR UPDATE の両方を指定する SELECT C1 FROM T1 WHERE C1 > 0 FOR UPDATE ; < 補足事項 > 図 検索で EXCUSIVE の排他を取得する場合 クライアント環境定義にPDFORUPDATEEXLOCK=YESを指定すると FOR UPDATE 指定によって 必ず EXCLUSIVEの排他を取得するようになります 他 DBMSからのUAPの移行などで FOR UPDATE 指定時にEXCLUSIVEの排他を適用したい場合は 本指定の検討をしてください バージョン09-50 以降では オペランド省略時動作が推奨モードの時 PDFORUPDATEEXLOCKを省略するとYESが仮定されます 73

75 8. 更新に関する記述 更新処理では二重更新 排他待ちやデッドロックになる場合があります これらを起こさないための SQL コーディングについて示します 74

76 更新に関する記述 8-1 更新 SQL での二重更新に対する注意 (1) Point インデクスを使用して絞り込んだデータに対し そのインデクス構成列の更新をする場合は 更新後の値が探索条件にヒットしないように記載する UPDATE にて更新後の値が インデクスで絞り込んだ範囲に含まれる場合 同一行を二重更新 ( 二回更新 ) することがあります DB の整合性は保たれますが SQL 連絡領域の更新行数には述べ更新行数が通知されます 更新行数を意識するアプリケーションでは 注意してください 例を図 に示します インデクス定義 T1(C1) UPDATE T1 SET C1 = 10 WHERE C1 > 0 AND C1 <> 10 ; UPDATE T1 SET C1 = C WHERE C1 > 0 ; UPDATE T1 SET C1 = 10 WHERE C1 > 0 ; C1 の更新後の値がヒットしないような探索条件を指定する 更新値の指定にスカラ演算を含む場合は 作業表にデータを一旦退避するので二重更新することはない 探索条件で使用するインデクスの構成列を更新する場合は 更新行数が二重にカウントされるので注意が必要 図 UPDATE で探索条件に使用するインデクスを更新する場合 75

77 更新に関する記述 更新 SQL での二重更新に対する注意 (2) カーソルを使った更新でも 同様に二重更新されることがあるので 更新後の値が探索条件にヒットしないようにしてください 例を図 に示します インデクス定義 T1(C1) SELECT C2 FROM T1 WHERE C1 > 0 AND C1 <> 10 WITH EXCLUSIVE LOCK FOR UPDATE ; UPDATE T1 SET C1 = 10 WHERE CURRENT OF カーソル名 ; C1 の更新後の値がヒットしないような探索条件を指定する SELECT C2 FROM T1 WHERE C1 > 0 WITH EXCLUSIVE LOCK FOR UPDATE ; 検索で使用するインデクスの構成列を更新する場合は注意が必要 UPDATE T1 SET C1 = 10 WHERE CURRENT OF カーソル名 ; 図 カーソルを用いた更新で探索条件に使用するインデクスを更新する場合 < 補足事項 > 以下のいずれかの指定の場合 UPDATEで探索条件に使用するインデクス構成列を更新すると 必ず作業表にデータを一旦退避するので 二重更新されることはありません しかし作業表作成のオーバヘッドかかるため 性能が劣化します システム定義に pd_indexlock_mode =KEY ( デフォルトはNONE: インデクスキー値無排他 ) を指定 SQL 最適化オプションから "DETER_WORK_TABLE_FOR_UPDATE"( デフォルトで仮定される : 更新 SQLの作業表作成抑止 ) を外す 76

78 9. アプリケーション上での記述 HiRDB における性能向上 保守性向上のためのアプリケーション記述のガイドラインを示します 77

79 アプリケーション上での記述 9-1 埋込み変数の使用 Point 探索条件の値だけが異なる SQL 文が 2 つ以上ある場合は埋込み変数を利用する DBMS は SQL 文の解析 (SQL オブジェクト作成 ) 実処理の 2 ステップで SQL 文を実行します SQL 文の解析処理を高速化するため SQL 文とその解析結果は SQL オブジェクト用バッファにキャッシュされます 探索条件の値だけが異なる SQL を複数回発行する場合は 埋込み変数を利用し 同一の SQL 文を使いまわすようにします すると HiRDB はキャッシュを使用し SQL の解析処理を省略するため 性能が向上します また 埋込み変数を用いると値が変化する箇所が明確になり 可読性 保守性が向上します 例を図 に示します 動的 SQL の場合は? パラメタを利用してください SELECT SNAME FROM ZAIKO WHERE ZSURYO = :XSURYO ; 埋込み変数にそれぞれ を代入して発行 SELECT SNAME FROM ZAIKO WHERE ZSURYO = 123 ; 別々の SQL 文として発行しない SELECT SNAME FROM ZAIKO WHERE ZSURYO = 987 ; 図 埋込み変数の例 78

80 アプリケーション上での記述 9-2 比較時の型一致 Point 探索条件では 予め比較の型を合わせておく INT 型と DECIMAL 型など 異なる型の列を比較する場合 内部で型の変換処理が発生し オーバヘッドがかかります 無駄な処理を省き 型変換を明示するために予め比較対象の型を合わせておきます 定数指定の場合は HiRDB が SQL 解析時に型変換を行う場合もありますが 埋込み変数などの変数指定時は 各行を評価するごとに型変換処理を行うため 特に注意が必要です 列比較時における型の例を図 に示します ZSURYO は DEC(3) 型 ~ WHERE ZSURYO = :XX XX は DEC(3) 型 ~ WHERE ZSURYO = :YY YY は INT 型 図 列比較時における型の例 79

81 アプリケーション上での記述 9-3 配列 FETCH の使用 Point ヒット件数が多い場合には 配列 FETCH を使用する ヒット件数が多い場合には 配列 FETCH を使用します 配列 FETCH は FETCH 文で INTO 句に配列型の埋込み変数を指定することで複数行取得できます 複数の検索結果の転送をまとめることで 通信量削減による性能向上が期待できます 配列 FETCH を適用できない場合は ブロック転送機能を使用してください 例を図 に示します FETCH カーソル名 INTO : 埋込み変数配列 : 標識変数配列 クライアント環境定義 PDBLKF=50 配列変数にて複数行を一括して FETCH する 複数行の検索結果を一括して転送する 転送行数 50 は適切にチューニングする 図 配列 FETCH ブロック転送の指定例 80

82 アプリケーション上での記述 9-4 表中の全行の削除は PURGE TABLE 文を使用 Point 表中の全行を削除する場合は PURGE TABLE 文を使用する 表のすべての行を削除する場合 PURGE TABLE 文を使用してください PURGE TABLE 文の場合は 表データの管理情報をクリアします このため DELETE 文を実行して一つ一つの行を削除するより 高速に表を空にします また 管理情報をクリアするため 削除した領域は再利用可能となり 使用中空きページが発生しません なお PURGE TABLE 文が成功すると自動的に COMMIT され ROLLBACK できないことに留意してください 例を図 に示します PURGE TABLE ZAIKO ; DELETE FROM ZAIKO ; WHERE 句指定なしの DELETE 文を使用して表中のデータをすべて削除 図 PURGE TABLE 文で表中の全データ削除例 81

83 アプリケーション上での記述 9-5 検索のみのトランザクション処理時の注意 Point 検索のみの処理でもトランザクションが発生するので COMMIT を発行する 検索のみの処理でもトランザクションが発生するので処理単位ごとに COMMIT を発行してください 検索でも排他オプションを指定しない場合は デフォルトで共用排他が行単位に取得されますが COMMIT により開放されます 検索に関しては 無排他検索 (WITHOUT LOCK NOWAIT) にできないかの検討も行ってください 例を図 に示します SELECT ; SELECT ; COMMIT ; : : DISCONNECT ; SELECT ; SELECT ; : : DISCONNECT ; 共用排他の範囲 共用排他の範囲 処理単位で COMMIT を発行すると 排他が開放される COMMIT を発行しないと DISCONNECT まで排他が保持され 更新業務との間で排他待ちが発生する 図 検索のみのトランザクションでの COMMIT の発行例 82

84 10. 保守性を向上させるための記述 SQL 文のリーダビリティを向上させるために SQL 文のコーディング規約を設けます 本章では SQL 文の標準スタイルについて規定します 本章の SQL 例で使用する EMP 表の定義構造を以下に示します 列名 EMP_NO ENAME SAL DEPT_NO データ型 INT NVARCHAR(50) INT INT EMP 表の定義構造 83

85 保守性を向上させるための記述 10-1 キーワード Point 識識別子等の名前は 引用符 (") で囲む 名前を指定する場合 引用符 (") で囲んで指定することを推奨します なお 名前を引用符 (") で囲んだ場合 半角英小文字 及び半角英大文字は区別して扱います 名前には 予約語と同じ名前を指定できませんが 引用符 (") で囲んだ場合は 予約語と同じ名前を指定できます SQL の拡張に伴って システムに登録する予約語を追加する場合があるので 名前はあらかじめ引用符 (") で囲んで指定しておくと 追加した予約語と重複する問題が発生しません ただし 次に示す名前を UAP で使用する場合は SQL の予約語と同じでも引用符 (") で囲まないで指定してください カーソル名 SQL 文識別子 埋込み変数名 標識変数名 ホスト識別子 本ガイドラインの他の例では スペースの都合で引用符 (") を省略しています 84

86 保守性を向上させるための記述 10-2 表名の付与 Point SELECT 文においては ( 単一の表に対する処理でも ) すべての列名を表名 ( または相関名 名称が短くできるため相関名の方が良い ) で修飾すること 表名を付与することにより列が属している表を明確化することができ 可読性 保守性が高まります また同じ表を結合する場合 または副問合せで同じ表の列を参照する場合に備えて 表名として相関名を使用すると良いです 表名付与の例を図 に示します SELECT EM.ENAME, DE.DNAME FROM EMP EM, DEPT DE WHERE EM.DEPT_NO = DE.DEPT_NO AND EM.SAL > 1000 ; SELECT ENAME, DNAME FROM EMP, DEPT WHERE EMP.DEPT_NO = DEPT.DEPT_NO AND SAL > 1000 ; 相関名を付与 列名に表名が無い 相関名を付与 列名に表名が無い 図 列名の接頭辞使用の例 本ガイドラインの他の例では スペースの都合で表名を省略している場合があります 85

87 保守性を向上させるための記述 10-3 列の明示的指定 (1) Point 列の指定を * で省略しないこと不要な列の情報を取得しないこと INSERT 時の列指定を省略しないこと 列の指定時にすべての列を取り出す * を指定すると 解析の処理時間が増大します それだけでなく 列の順番は物理設計 ( 性能 格納効率を考慮し 可変長の列を最後尾に入れ替える ) 列の追加などによって変更される可能性が高く 列の順番に依存した SQL 文はバグの原因となります また無駄な列を指定していれば その分処理 転送時間が増加します 検索時の指定の例を図 に 挿入時の例を図 に示します 86

88 保守性を向上させるための記述 列の明示的指定 (2) SELECT EM.EMP_NO, EM.ENAME FROM EMP EM ; 業務に必要な列のみ参照する SELECT EM.EMP_NO, EM.ENAME, EM.SAL, EM.DEPT_NO FROM EMP EM ; SELECT EM.* FROM EMP EM ; * を使用しない 全列が必要な場合も * を使用せず 明示的に指定 図 SELECT 文における列指定の例 87

89 保守性を向上させるための記述 列の明示的指定 (3) INSERT INTO EMP(EMP_NO, ENAME) VALUES (200007, N' スカート ') ; 全列に挿入しない場合 列指定の省略は不可 INSERT INTO EMP(EMP_NO, ENAME, SAL, DEPT_NO) VALUES (200008, N' ブラウス ', , 1080) ; INSERT INTO EMP VALUES (200008, N' ブラウス ', , 1080) ; 全列に挿入する場合 列指定を省略した悪例 図 INSERT 文における列指定の例 全列に挿入する場合でも 列を明示的に指定する 88

90 保守性を向上させるための記述 10-4 ORDER BY 句における明示的列指定 Point ORDER BY 句では列名を使用すること ASC( 昇順 ),DESC( 降順 ) の指定を省略せず明記すること ORDER BY 句では何列目でソートするかを数字で指定することも可能ですが 列順に依存するため保守性に劣ります よって ORDER BY 句では列名を使用します また ASC( 昇順 ) DESC( 降順 ) の指定を明記してください 例を図 に示します SELECT EM.EMP_NO, EM.ENAME, EM.SAL FROM EMP EM; ORDER BY EM.EMP_NO ASC, EM.SAL ASC ; ORDER BY 句では 列名で指定 SELECT EM.EMP_NO, EM.ENAME, EM.SAL FROM EMP EM ORDER BY 1 ASC, 3 ASC ; ソート順をソート項目指定番号で指定しないこと 図 ORDER BY 句の使用例 89

91 保守性を向上させるための記述 10-5 SQL 文の記述 Point SQL 文の記述は 大文字または小文字のいずれかに統一することが望ましい条件の値が異なるだけの SQL 文は? パラメタ 埋込み変数を用いる 動的 SQL を繰り返し用いる場合 SQL オブジェクトにヒットし SQL の前処理を省略するためには SQL 文の一字一句が大文字小文字も含めてまったく同じである必要があります 条件の値が異なれば SQL オブジェクトがヒットしなくなります よって? パラメタ 埋込み変数を用いることにより SQL オブジェクトにヒットするようにできます? パラメタを用いる例を図 に示します 埋込み変数を用いる例については 9-1 埋込み変数の使用 を参照してください SELECT ZA.ZSURYO FROM ZAIKO ZA WHERE ZA.TANKA >? ; SELECT ZA.ZSURYO FROM ZAIKO ZA WHERE ZA.TANKA > 100 ; 条件の値 100 を など値を変更して繰り返し検索する場合? パラメタを用いる 図 ? パラメタの使用例 90

92 11. おわりに 91

93 11-1 おわりに これからも HiRDB にご期待ください! 92

94 付録 A. SQL の最適化指定 93

95 付録 A-1 使用インデクスの SQL 最適化指定の適用検討 解説 使用インデクスを指示したい場合の SQL 最適化指定の使い方について解説します アプリケーション内で DB をアクセスする場合 SQL 文が使用するインデクスを確認します 通常 HiRDB のオプティマイザが自動的に最適なインデクスを選択しますが 場合によっては 効率の悪いインデクスを選択する場合があります 今後 アプリケーションを変更 ( 新規を含む ) する場合 DB アクセス時に使用するインデクスを SQL トレースで確認し 最適なインデクスが選択されていない場合には 使用するインデクスを明示的に指定する WITH INDEX 句を記述し 使用するインデクスを固定することを推奨します ( オプティマイザと WITH INDEX 句の指定が異なる場合は できるだけ性能測定を行います ) HiRDB が ヒット件数が多くてアクセス効率の悪い場合 SQL 最適化指定の適用を検討する SELECT SNAME FROM ZAIKO WHERE TANKA <= 500 AND ZSURO = 100; インデクス定義 IDX1(TANKA) IDX2(ZSURYO) TANKA で効率よく絞り込める場合 SELECT SNAME FROM ZAIKO WITH INDEX (IDX1) WHERE TANKA <= 500 AND ZSURO = 100; TANKA と AND 条件の ZSURYO でさらに絞り込める場合 SELECT SNAME FROM ZAIKO WITH INDEX (IDX1,IDX2) WHERE TANKA <= 500 AND ZSURYO = 100; 図 A.1-1 WITH INDEX 句を指定した指定例 94

96 付録 A-2 結合方式の SQL 最適化指定の適用検討 解説結合方式を指示したい場合の SQL 最適化指定の使い方について解説します HiRDB のオプティマイザが自動的に効率の良い結合方法を選択しますが 稀に悪い結合方法を選択する場合があります その場合 個別の SQL に効率の良い結合方法をチューニングするために SQL 最適化指定を指定します ただし 指定できるのは INNER JOIN または LEFT OUTER の構文のみです HiRDB のオプティマイザが効率の悪い結合方法を選択した場合の SQL SELECT ZA.ZSURYO, ZA.DNO FROM ZAIKO ZA, JUTYU JU WHERE ZA.ZSURYO = JU.SURYO ; 個別の SQL で結合方式の SQL 最適化指定すると 効率が改善される 個別の SQL で効率の良い結合方式の SQL 最適化指定した場合 SELECT ZA.ZSURYO, ZA.DNO FROM ZAIKO ZA INNER JOIN BY NEST JUTYU JU ON ZA.ZSURYO = JU.SURYO ; SELECT ZA.ZSURYO, ZA.DNO FROM ZAIKO ZA INNER JOIN BY HASH JUTYU JU ON ZA.ZSURYO = JU.SURYO ; SELECT ZA.ZSURYO, ZA.DNO FROM ZAIKO ZA INNER JOIN BY MERGE JUTYU JU ON ZA.ZSURYO = JU.SURYO ; 図 A.2-1 SQL 最適化指定を指定した例 BY NEST を指定してネストループジョインで結合する 絞り込める表を外表に指定する BY HASH を指定してハッシュジョインで結合する ハッシュ表のサイズが小さくなる表を内表に指定する BY MERGE を指定してマージジョインで結合する 95

97 付録 B. 定義に関する記述 96

98 付録 B-1 表の属性 Point NULL 値の利用が不要であり かつ可変長列の使用の必要がない場合は 極力 FIX 表を使用する NULL 値の利用が不要であり かつ可変長列の使用の必要がない場合は 極力 FIX 表を使用します ただし FIX 表にするために 可変長文字列を固定長文字列に変換する場合は DB 容量が増加しないように注意する必要があります FIX 表の場合 以下について向上が図れます FIX 属性を指定していない表と比べて 物理的な行長が 1 列で 2 バイト短くなるので 列数の多い表の場合はディスク所要量を削減できる UAP で行単位インタフェースが使用できるため 列数が多くてもアクセス性能を向上できる 97

99 付録 B-2 列の属性 Point 列属性は 適切なものを指定する A) 十数バイト以下の列または格納されるデータが全行ほぼ同じ長さの場合 CHAR 属性を使用する VARCHAR にはしない B) 小数点以下を使用しない場合は INTEGER を使用する 演算負荷が高いので DECIMAL は使用しない C) 金額のデータには FLOAT を使用しない 誤差が出る D) 半角文字と全角文字が混在して格納される値がある場合に限り混在文字データ型 (MCHAR) を指定する E) 混在文字データ型 (MCHAR) では半角文字 全角文字を意識するオーバヘッドが発生し性能劣化を引き起こすため格納文字種別が半角 / 全角に特定できる場合は文字データ型 (CHAR) 各国文字データ型 (NCHAR) を指定する F) VARCHAR/CHAR 型に全角文字を格納すると LIKE 述語で正しく判定されないので全角文字を格納する場合は NVARCHAR/NCHAR 型または MVARCHAR/MCHAR 型を指定すること G) 実長 256 バイト以上となることが多い文字列データ型の列の定義時には NO SPLIT を指定すると格納効率が向上する バージョン 以降 NO SPLIT を常に適用する H) データ長が長くて非 FIX 表の CHAR MCHAR NCHAR の後方に空白が多い場合に SUPPRESS を指定する スペースを抑止して DB に格納することにより ディスク容量を削減する 98

100 付録 B-3 インデクス定義 Point インデクス設計時には 各種オプションにも留意する A) PRIMARY KEYは主キーを明確にするために有効である しかしPRIMARY KEYのインデクスは インデクス名が自動的に決定されるため インデクス専用グローバルバッファを定義するときは保守性が悪くなる そのため PRIMARY KEYには 専用のインデクス格納用 RDエリアを定義し そのRDエリアにグローバルバッファを定義したほうが良い また PRIMARY KEYのインデクス構成列を変更するためには 表の再定義が必要になるので注意が必要である B) インデクス定義は アクセスするデータを絞り込める条件の列に定義する データページのI/O 回数を大きく削減する C) 各探索条件のパターン 各探索条件によるヒット件数 ソートの有無 更新列 および実行頻度等に基づき インデクスのサーチ範囲 データのアクセス回数を考慮し インデクスの構成列 構成順序 インデクス数を決定する D) インデクスの未使用領域比率の比率指定は データロード後に更新がない場合や キー値が昇順にしか追加されない場合に 0を指定する ディスク容量を節約やバッファの利用効率が良くなる 均等に更新される場合は 更新頻度に応じて未使用領域作成しておくことによって インデクススプリットの発生を抑えることができる E) UNBALANCED SPLITは 連続した中間キー値の追加が頻繁に発生する場合に指定する 最終ページ以外のリーフページの追加位置によって分割位置を変えることで スプリットの発生頻度を削減する 99

101 付録 B-4 表オプション Point 表設計時には 各種オプションにも留意する A) 表の未使用領域の比率の指定 (PCTFREE) データロード後にデータの参照 データ入力のみの場合は 0 を指定することで ディスク容量を削減できる NULL の列にデータを入れるとき 更新してデータが長くなる ( 更新前のデータが NULL または更新後より短い ) 場合 0 以外を指定することで データの格納に乱れがないので性能の劣化を防ぐ B) 表中の DECIMAL データの前 0 サプレス指定 (SUPPRESS) 非 FIX 表で DECIMAL データの定義精度に対してデータ中の前 0 が多い場合に 前 0 を除いて DB 中に格納することによって ディスク容量を削減する C) WITHOUT ROLLBACK 採番のために使用する表 ( 採番管理表 ) では 排他が集中して 同じ実行性が悪くならないように 表定義時に WITHOUT ROLLBACK オプションを指定する 更新完了後は ロールバックされないので 番号が跳ぶ可能性があるので注意する 100

102 付録 B-5 順序数生成子の使用上の注意 Point 採番の方式には複数あり 用途に合ったものを使用する A) 採番には 採番管理表を用いて採番する方法と 自動採番機能 ( 順序生成子を使用する ) を使用する方法がある 自動採番機能は INSERT や UPDATE を実行する場合 採番した値が確認できないので 採番処理中でも採番した値が確認しやすい採番管理表を用いて採番する方法を主に用いる B) 自動採番機能を使用する場合に 採番した値の確認は採番処理が終了した後に検索処理を行なう また 主キーは採番して入力する列とは別の列に定義する C) 順序数生成子の出力間隔は 大きく指定することでログ出力回数が削減されるため 処理性能が向上する 採番管理表を用いて採番を管理する INSERT INTO SEQUENCE_TBL VALUES('T1',1); : DECLARE CUR1 CURSOR FOR SELECT SEQ_NO FROM SEQUENCE_TBL WHERE TABLE_NAME='T1' FOR UPDATE OF SEQ_NO WITH EXCLUSIVE LOCK; : OPEN CUR1 ; FETCH CUR1 INTO :X_SEQ_NO ; UPDATE SEQUENCE_TBL SET SEQ_NO=:X_SEQ_NO +1 WHERE CURRENT OF CUR1 ; CLOSE CUR1 ; : INSERT INTO T1 (DNO,ZNO,SNAME_ID) VALUES(:X_SEQ_NO,104,204); 順序数生成子を用いて採番を管理する INSERT INTO T2(DNO,ZNO,SNAME_ID) VALUES(NEXT VALUE FOR SEQ1,104,204) ; 図 B-5-1 採番の例 採番した値を確認できる 採番管理表の定義 CREATE FIX TABLE SEQUENCE_TBL (TABLE_NAME CHAR(30), SEQ_NO INTEGER )WITHOUT ROLLBACK; 順序数生成子の定義 CREATE SEQUENCE SEQ1 AS INTEGER START WITH 10 INCREMENT BY 10 MAXVALUE 999 MINVALUE 10 CYCLE LOG INTERVAL 10 IN RDDATA10; 採番した値を確認できない 101

103 付録 C. SQL をチューニングするパラメタの定義 102

104 付録 C-1 結合検索に関する記述 (1) ネストループジョインを強制する場合 表を数 % 以下に絞り込んでジョインする場合は ネストループジョインが一番高速です HiRDB は SQL 最適化オプションのデフォルト値にネストループジョイン優先 ("PRIOR_NEST_JOIN") を含んでおり = 述語で絞り込まれたジョインであればネストループジョインするようになっています 何も絞り込まずにジョインする場合などでもネストループジョインを必要とする場合は ネストループジョイン強制 ("FORCE_NEST_JOIN") を SQL 最適化オプションに指定します なお デフォルトで指定される他のオプションを否定しないよう明示指定することに留意してください なお 上記オプションを指定しても以下のいずれかの場合にはネストループジョインとはなりません 結合条件の内表の列にインデクスが定義されない 結合列がインデクスの先頭構成列であるか 先頭構成列から結合列まで連続して = 条件が指定されている必要がある 結合条件には 列 = 列 の条件がない または OR 条件下に指定されている ただし 結合条件の外表がスカラ演算されている場合は SQL 拡張最適化オプションに値式に対する結合条件適用機能 ("APPLY_JOIN_COND_FOR_VALUE_EXP") を指定すればネストループジョインとなる 結合の内表が内部導出表 ( 詳細は HiRDB SQL リファレンス 2 章 ) とならない パラレルサーバに限るが 分割表に対する LEFT OUTER JOIN にて 内表の分割キーの内結合条件に含まれない列がある 103

105 付録 C-1-1 結合検索に関する記述 (2) ネストループジョインをハッシュジョインに変更する場合 結合結果の件数が多い場合 ハッシュジョインが効率よく結合処理を行なう場合があります ネストループジョインをハッシュジョインに変更する指定を以下に示します 1 SQL 拡張最適化オプションに コストベース最適化モード 2 の適用 ( COST_BASE_2 ) かつハッシュジョイン 副問合せのハッシュ実行 ( APPLY_HASH_JOIN ) を指定する 2 ハッシュ表サイズの指定を行う システム定義の pd_hash_table_size またはクライアント環境変数の PDHASHTBLSIZE 3 作業表用バッファの確保方式の指定を行う ( デフォルトは pool のため 省略可能 ) システム定義の pd_work_buff_mode = pool 4 作業表用バッファのサイズの指定を行う システム定義の pd_work_buff_size またはシステム定義の pd_work_buff_expand_limit 5 SQL 最適化オプションにて ネストループジョイン優先 ("PRIOR_NEST_JOIN") またはネストループジョイン強制 ("FORCE_NEST_JOIN") を指定していれば外す 上記で まだネストループジョインを行う場合は 6 結合列のインデクスを削除する ( 注 ) ハッシュジョインを行うためには データ型 データ長が同じ列同士の列 = 列の結合条件 (OR 演算した条件は不可 ) が指定されている必要があります 104

106 付録 C-1-2 結合検索に関する記述 (3) ハッシュジョインを一括ハッシュジョインにする場合 ハッシュ表サイズの指定で一括ハッシュジョイン処理 ( 内表から作成したハッシュ表を すべて作業表バッファ領域に展開しハッシュジョインする ) か バケット分割ハッシュジョイン処理 ( 内表 外表をバケットに分割し 内表の一部を作業表用バッファ領域に展開し 残りを作業表用ファイルに退避する ) かが決まり 性能も大きく異なります 一括ハッシュジョインにするためには ハッシュ表サイズを 内表の条件評価後のヒットデータをすべて載せるために十分な大きさにします ハッシュ表に内表データをすべて載せるには 以下のシステム定義 クライアント環境変数のオペランドを変更します 1 システム定義の pd_hash_table_size またはクライアント環境変数の PDHASHTBLSIZE を大きくする 2 システム定義の pd_work_buff_size または pd_work_buff_expand_limit を大きくする ( 注 ) 一括ハッシュジョインかバケット分割ハッシュジョインかどうか および一括ハッシュジョインするために必要なハッシュ表サイズは UAP に関する統計情報または UAP 統計レポート機能で確認できます 内表の条件評価後のヒットデータが ハッシュ表に載りやすくするために 条件評価後のヒットデータの少ない表を内表とします 外表と内表を入れ替えは 結合表構文 (INNER JOIN) を指定することにより行います 105

107 付録 C-2 グループ分け高速化処理 Point グループ分け高速化処理に対しては PDAGGR をチューニングする SQL 最適化オプションの指定を省略した場合 "RAPID_GROUPING"( グループ分け高速化処理 ) は省略値であるため GROUP BY を指定した SQL に対して ハッシュ表を使用したグループ分け高速化処理が適用されます ハッシュ表のサイズは クライアント環境定義 PDAGGR( 省略値は 1024) に基づいて決定されます ハッシュ表の領域不足を起こさないためには クライアント環境定義 PDAGGR にグループ化での最大グループ数を指定します ただし メモリの使用量とのトレードオフであるため 実メモリの空きサイズより適切な値を検討してください グループ分け高速化処理は グループ化前の行数に対して グループ数が十分小さい場合に大きな効果を発揮します 106

108 付録 C-3 無排他条件判定の指定 (1) Point 厳密な条件判定が要求されない場合は 無排他条件判定の適用を検討する インデクスが適切に定義されていないため 効率よくインデクスを利用した検索できない場合や テーブルスキャンになる場合 検索する行に排他が一時的にかかるため 条件に該当しないものにも排他がかかってしまいます このようなとき 無排他条件判定で探索条件を判定して満たした行にだけ排他を掛けます 無排他条件判定は 検索処理時には排他を掛けないで 探索条件を判定して満たした行にだけ排他を掛けます 探索条件を満たさない行 またはキー値に対して排他を掛けないため 通常の検索と比べて 検索時間が短縮でき 同時実行性を向上させます 次に検索する行の有無の判定 検索する行に排他を掛ける 探索条件の判定 条件に該当条件に該当しするないそのままの排他を解除状態する 図 C.3-1 通常の検索処理と排他の例 107

109 付録 C-3-1 無排他条件判定の指定 (2) 次に検索する行の有無の判定 探索条件の判定 条件に該当条件に該当しするない検索する行にそのままの排他を掛ける状態 そのままの状態 図 C.3-2 無排他条件判定を使用した検索処理の排他の例 無排他条件判定を指定する場合は 余分な範囲を検索しないように 検索するキーは探索範囲絞り込めるようにインデクスのチューニングを行っておきます インデクスのキーによって 探索範囲をある程度絞り込んだ状態から 条件を切り出して検索した場合 条件を満たすものだけに排他を掛けます このため 探索範囲の件数に比べて 条件を満たす件数が少ないと 通常の検索処理に比べて ( 条件を満たす件数 / 探索範囲の件数 ) の割合で排他処理を削減できます 無排他条件判定は クライアント環境定義のPDLOCKSKIPでYESを指定します 排他を掛けないで条件判定をするため COMMITしていないデータを検索して条件判定するおそれがあります 例えば 更新トランザクションと同時に条件判定するとき 条件判定での検索結果と 更新トランザクションの処理結果との間に差異 (ROLLBACKによる読み飛ばし) が発生することがあるので注意が必要です 108

110 付録 D. チューニングに関する記述 109

111 付録 D-1 インデクスを有効に使用するための考慮 Point インデクス定義時は メリット / デメリットを考慮する 以下にインデクスを有効に使用するために考慮する点について示します A) 大量データのランダム参照と I/O の増加大量データをアクセスすると ランダムにデータを参照したり アクセスする表の全データページ数を大きく超える I/O が発生したりする場合がある I/O を削減するために 絞り込める列にインデクスを定義する またインデクスを定義した列に絞り込みできるようにすること B) 更新列のインデクスメンテナンスによる更新オーバヘッドの増加インデクス定義時 更新の多い列に対する考慮すること C) 重複の多いキー値は インデクスメンテナンスオーバヘッド大ナル値の重複が多い場合は インデクス定義でナル値の除外を指定すること D) 絞り込める条件を指定している検索においてテーブルスキャン絞り込める条件の列にインデクスを定義することによって 表のデータのアクセス量を削減し 検索性能を改善できる ( 表の行数が少なく 現時点で性能が悪くなくても 将来 行数が増加する場合や 本番環境で行数が多いという場合に インデクスを利用すると性能が安定する ) 110

112 付録 D-2 集合関数 MAX/MIN でのインデクス利用 (1) Point 集合関数 MAX MIN の引数にする列は インデクスを定義する 集合関数 MAX MIN は 引数の列にインデクスの構成列を指定します 探索条件がない場合は MAX MIN の引数に 第 1 構成列を指定します また 探索条件がある場合は 条件を満たすインデクス構成列を指定することで インデクスを利用して最小値 最大値を求める性能が向上します 探索条件がある場合 次の条件を満たすインデクスが利用される = 条件列 ( または IS NULL 条件列 ) を 第 1~ 第 n 構成列として連続して含む n 1 MAX MIN の引数の列に 第 n+1 構成列に含む その他の条件列を第 n+2 構成列以降に含む SQL 文中に C1~Cm まで使用する m: 定義したインデクスの最大構成列数 SELECT MAX(Cn+1 ), MIN(Cn+1 ) FROM T1 WHERE C1=10 AND AND Cn=20 AND Cn+2 <30 AND Cm >40 INDEX ON T1(C1,, Cn, Cn+1, Cn+2,, Cm) 図 D.2-1 集合関数 MIN/MAX でのインデクスの利用 111

113 付録 D-2-1 集合関数 MAX/MIN でのインデクス利用 (2) SELECT MAX(ZA.ZSURYO) FROM ZAIKO ZA WHERE ZA.DNO=10 AND ZA.ZNO=20 ; SELECT MAX(ZA.ZSURYO) FROM ZAIKO ZA WHERE ZA.DNO=10 AND ZA.ZNO=20 AND ZA.ZSURYO<30 ; インデクス X01( DNO, ZNO, ZSURYO, TANKA ) 条件にインデクスの第 1 構成列から連続して = 指定 MAX の引数にインデクスの第 3 構成列を指定 SELECT MAX(ZA.ZSURYO) FROM ZAIKO ZA WHERE ZA.DNO=10 AND ZA.ZNO=20 AND ZA.TANKA<40 ; SELECT MAX(ZA.ZSURYO) FROM ZAIKO ZA WHERE ZA.DNO=10 AND ZA.ZNO<20 ; SELECT MAX(ZA.ZSURYO) FROM ZAIKO ZA WHERE ZA.DNO=10 AND ZA.ZNO=20 AND ZA.SNAME_ID<50 ; 図 D.2-2 最小値 最大値を取得の例 条件にインデクスの第 1 構成列に = 指定 第 2 構成列は < 指定 MAX の引数にインデクスの第 3 構成列を指定 第 2 構成列の条件指定は = 条件を指定する 条件にインデクス以外の列を指定 条件にはインデクスの構成列を指定して ソート処理を削減する 112

114 付録 D-2-2 集合関数 MAX/MIN でのインデクス利用 (3) 次の場合は MAX MIN 利用時 効率的に最小値 最大値を取得できないので注意してください 結合検索を指定 GROUP BY 句を指定 引数の異なる MAX MIN を指定 探索条件に値式または 256 ハ イト以上の値 表がサーバ内で複数 RD エリアに分割格納され インデクスも分割インデクス ( 分割キーのすべての構成列に = 条件がある場合を除く ) 以降は HiRDB/ パラレルサーバのみ INSERT~SELECT 文中 集合演算を指定 HAVING 句を指定 FOR READ ONLY を指定 113

115 付録 D-3 DISTINCT 集合関数のインデクス利用 Point DISTINCT 集合関数の引数にする列はインデクスの第 1 構成列に定義する DISTINCT 集合関数の引数にインデクスの第 1 構成列を指定すると 作業表の作成が回避されます SELECT COUNT(DISTINCT ZA.SNAME) FROM ZAIKO ZA; CREATE INDEX XO1 ON ZAIKO (SNAME, COL); CREATE INDEX XO1 ON ZAIKO (SNAME); CREATE INDEX XO1 ON ZAIKO (COL, SNAME); 図 D.3-1 インデクス列のみ選択の例 引数が第 1 構成列にならない 114

116 付録 D-4 ネストループジョイン (1) Point インデクスは内表の結合キーを第 1 構成列から連続して構成列に指定して定義する 内表検索時に行データを参照して結合条件を評価する指定は 検索の性能を著しく悪くさせます 検索の性能向上を図るために 以下に示す結合キーをインデクスに定義して インデクス利用効率を向上させます 結合キーと一致するインデクスである 結合キーのすべての列が第 1~ 第 n 構成列に連続して含まれるインデクスである 不連続な場合 第 1~ 第 n 構成列は 結合列か = 条件列か IS NULL 条件列である 115

117 付録 D-4-1 ネストループジョイン (2) SELECT JU.ZNO FROM ZAIKO ZA, JUTYU JU WHERE ZA.DNO = 10 AND JU.ZNO = ZA.ZNO AND JU.SURYO = ZA.ZSURYO AND JU.TCODE = ZA.TCODE ; ZAIKO JUTYU のネストルーフ シ ョインとする内表 JUTYU の結合キーは以下 ZNO, SURYO, TCODE CREATE INDEX XO1 ON JUTYU(ZNO, SURYO, TCODE); CREATE INDEX XO1 ON JUTYU(TCODE, SURYO, ZNO); 結合キーがすべて含まれる 探索条件の指定順序と構成列順が異なっても良い CREATE INDEX XO1 ON JUTYU(ZNO, TCODE, SURYO); CREATE INDEX XO1 ON JUTYU(ZNO, SURYO, TCODE, JDATE1); 結合キーは先頭の構成列から連続していれば良い CREATE INDEX XO1 ON JUTYU(ZNO, SURYO, JDATE1, TCODE); CREATE INDEX XO1 ON JUTYU(ZNO); CREATE INDEX XO1 ON JUTYU(SURYO); CREATE INDEX XO1 ON JUTYU(ZNO, SURYO); JDATE1 により結合キーは先頭の構成列から連続しないとサーチ範囲が広く性能劣化 結合キーのいくつかがインデクス構成列に含まれない 図 D.4-1 結合キーとインデクスの定義例 116

118 付録 E. SQL 最適化オプション 117

119 付録 E-1 SQL 最適化オプション SQL 拡張最適化オプション 解説 SQL 最適化オプション SQL 拡張最適化オプションとは データベースの状態を考慮して 最も効率的なアクセスパスを決定するための SQL 実行時の最適化方法を指定するオプションのことです SQL 最適化オプションと SQL 拡張最適化オプションの指定方法を示します 詳細は マニュアル システム定義 UAP 開発ガイド または SQL リファレンス を参照してください 指定の種類指定場所パラメタ SQL 最適化オプションの指定 SQL 拡張最適化オプションの指定 システム定義クライアント環境定義ストアドルーチン中およびトリガ中のSQL 文システム定義クライアント環境定義ストアドルーチン中およびトリガ中のSQL 文 pd_optimize_level PDSQLOPTLVL OPTIMIZE LEVEL pd_additional_optimize_level PDADDITIONALOPTLVL ADD OPTIMIZE LEVEL 118

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部 はじめに コース概要と目的 Oracle 独自の手続き型言語である PL/SQL について説明します PL/SQL の基本構文 ストアド サブプログラム トリガーの作成方法 またストアド サブプログラムの管理について習得することを目的としています 受講対象者 これから PL/SQL を使用してアプリケーション開発をされる方 前提条件 SQL トレーニング コースを受講された方 もしくは 同等の知識をお持ちの方

More information

プレポスト【問題】

プレポスト【問題】 1/5 ページ プレポスト データベース基礎 受講日程受講番号氏名 1 データベースの特徴で間違っているものを選びなさい 1. データの一元管理が可能 2. データの重複が少ない 3. プログラムとの関係が1 対 1 4. データの整合性の確保 2 ANSI/SPARC による 3 層スキーマについて正しいものを選びなさい 1. 外部スキーマ : プログラムに必要な部分のデータ構造を定義概念スキーマ

More information

Microsoft PowerPoint - db03-5.ppt

Microsoft PowerPoint - db03-5.ppt データベース言語 SQL リレーショナルデータモデルにおけるデータ操作言語 : リレーショナル代数 少なくともリレーショナル代数と同等のデータ検索能力をもつときリレーショナル完備という. リレーショナル代数はユーザフレンドリではない. 自然な英文による質問の表現が必要になる. リレーショナルデータベース言語 SQL 英文による簡単な構文 リレーショナル代数でできない, 合計, 平均, 最大などの計算機能の組み込み.

More information

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント はじめに コース概要と目的 Oracle をより効率的に使用するための SQL チューニング方法を説明します また 索引の有無 SQL の記述方 法がパフォーマンスにどのように影響するのかを実習を通して習得します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 SQL トレーニング データベース アーキテクチャ コースを受講された方 もしくは同等の知識をお持 ちの方 テキスト内の記述について

More information

Microsoft PowerPoint - 講義補助資料2017.pptx

Microsoft PowerPoint - 講義補助資料2017.pptx 66 SQL 最も標準的なリレーショナルデータベースの言語 ISO による国際標準規格であり特定の企業に依存しない SQL の規格 :SQL89(SQL1), SQL92(SQL2), SQL:1999(SQL3), SQL:2003, SQL:2006, SQL:2008, SQL:2011 標準規格としての SQL は 何かの略語ではない と規定されている ( 参考 : IBM 社の製品で使われている

More information

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター はじめに コース概要と目的 データベース処理に使用する SQL の基本構文と使用方法について説明します 受講対象者 SQL を使用してアプリケーション開発される方 管理者となられる方 前提条件 Oracle 概要 コースを受講された方 もしくは同等の知識をお持ちの方 テキスト内の記述について 構文 [ ] 省略可能 { A B } A または B のどちらかを選択 n _ 数値の指定 デフォルト値

More information

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行 はじめに コース概要と目的 SQL での作業の幅を広げるための応用的なテクニックをご説明します また 効率性の向上や正しい結果を得 るための記述方法など 実践的な記述方法についても併せてご説明します 本コースは SQL の応用的な記述テクニックとしてどのようなものがあるかを 1 日で広く浅くご理解いた だくことを目的としたコースです 細かな構文やオプションの習得は目的としておりませんことをご了承 ください

More information

マニュアル訂正連絡票

マニュアル訂正連絡票 < マニュアル訂正連絡票 > ASP レプリケーションサービス説明書 V25 [J2K 0-1056-01] 2015 年 12 月 22 日発行 4.7. 2ASP と PC 間のレプリケーション ~( 中略 )~ (3) オフライン同期 (CSVLink の利用 ) ASP の CNVDF コマンドでレプリケーション対象ファイルのデータを移出した CSV ファイルを PC に転送し 各 DBMS

More information

Chapter Two

Chapter Two Database 第 9 回 :SQL 言語 ( データベース操作 : 集合関数 抽出条件 副問い合わせ ) 上智大学理工学部情報理工学科 高岡詠子 No reproduction or republication without written permission. 許可のない転載 再発行を禁止します 2011/12/8 2011 Eiko Takaoka All Rights Reserved.

More information

Chapter Two

Chapter Two Database 第 8 回 :SQL 言語 ( データベース操作 ) 上智大学理工学部情報理工学科 高岡詠子 No reproduction or republication without written permission. 許可のない転載 再発行を禁止します 1 Schedule 日程 内容 第 1 回 10 月 6 日 ガイダンス, データベースとは? 第 2 回 10 月 13 日 三層スキーマ,

More information

データベースS

データベースS データベース S 第 4 回データベース言語 SQL(1) システム創成情報工学科尾下真樹 2018 年度 Q2 今日の内容 前回の復習 SQLの概要 SQLによる問い合わせの記述方法 SQLの基本的な書き方 条件 (WHERE) の書き方 出力 (SELECT) の書き方 順序付け (ORDER BY) グループ表 (GROUP BY) 教科書 リレーショナルデータベース入門 [ 第 3 版 ]

More information

Oracle Database Connect 2017 JPOUG

Oracle Database Connect 2017 JPOUG Oracle Database Connect 2017 / JPOUG 異なるデータベース間の SQL 比較と Oracle Database 12c の新機能 Noriyoshi Shinoda March 8, 2017 自己紹介篠田典良 ( しのだのりよし ) 所属 日本ヒューレット パッカード株式会社テクノロジーコンサルティング事業統括 現在の業務 Oracle Database をはじめ

More information

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗 PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗 アジェンダ 1.EXPLAIN とは 2. 表アクセスの基本 3. 結合の基本 4. 統計情報とは 5.EXPLAIN コマンド 6. 問題解決例 7. まとめ 2 1.EXPLAIN とは 実行計画とは - 目的地は 1 つでもアクセス方法は複数

More information

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作 Access 2007 と SQL Server Express を使用 SQL 文は SQL Server 主体で解説 Access 版ノースウィンドウデータベースを使用 DBMS プログラム サーバーエクスプローラ SQL 文 実行結果 データベース エンジン データベース SQL 文とは 1 度のコマンドで必要なデータを効率よく取得するための技術といえます

More information

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1

リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1 リレーショナルデータベース入門 SRA OSS, Inc. 日本支社 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 1 データベース とは? データ (Data) の基地 (Base) 実世界のデータを管理するいれもの 例えば 電話帳辞書メーラー検索エンジン もデータベースである Copyright 2008 SRA OSS, Inc.

More information

PA4

PA4 SQL チューニングによる 性能改善の効果とポイント 株式会社アクアシステムズ PPA4003J-00-00 株式会社アクアシステムズ Oracle データベースを専門とする技術者集団 Oracle チューニング & 監視ツール Performance Analyzer の開発 / 販売 Oracle 診断及びパフォーマンスチューニング Oracle データベースに関するコンサルティング Oracle

More information

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String 目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 5 馬青 1 文字処理 数値処理 : 整数 浮動小数点数 単一の文字は と ( シングルクォーテーション ) で囲んで表現される 文字のデータ型は char または int である int を用いたほうが ライブラリの関数の引数の型と一致する 以下は全部 int の使用に統一する 従って int ch; で文字変数を宣言しておくと ch= A ; のように ch に文字 A

More information

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2

アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2 Oracle Direct Seminar 試験対策ポイント解説 11g SQL 基礎 Ⅰ 日本オラクル株式会社 アジェンダ ORACLE MASTER Oracle Database 11g 概要 11g SQL 基礎 Ⅰ 試験紹介 ポイント解説 Copyright 2011 Oracle. All rights reserved. 2 資格体系 実務エキスパートの認定

More information

1,.,,,., RDBM, SQL. OSS,, SQL,,.

1,.,,,., RDBM, SQL. OSS,, SQL,,. 1,.,,,., RDBM, SQL. OSS,, SQL,,. 3 10 10 OSS RDBMS SQL 11 10.1 OSS RDBMS............................ 11 10.1.1 PostgreSQL................................. 11 10.1.2 MySQL...................................

More information

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt Oracle データベースと Microsoft Excel の連携ツール KeySQL 5.0 操作概要 Vol. 2 検索編 2004 年 7 月 テニック株式会社 はじめに > 本資料の目的 本講習会では KeySQLをはじめてお使いになる方を対象として Oracleクライアントのインストールから KeySQL の基本的な使用方法までをご説明いたします 実際にアプリケーションを操作しながら実習を進めてまいりますので

More information

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX] 開発 運用時のガイド [UNIX] JDK8 への移行に伴う留意点 2015.10 O c t o b e r はじめに 本書は 開発 運用フェーズで使用するドキュメントとして Java TM Development Kit 8 への移行に伴う 留意点について記述しています 1. 対象とする読者本書は Java TM Development Kit 8 を使用し システムを設計 構築 運用する立場にある方を対象としています

More information

目次 1. 変換の対象 砂防指定地 XML 作成メニュー シェープファイルからXMLへ変換 砂防指定地 XMLとシェープファイルの対応.csv 変換処理 CSVファイルによる属性指定... 5

目次 1. 変換の対象 砂防指定地 XML 作成メニュー シェープファイルからXMLへ変換 砂防指定地 XMLとシェープファイルの対応.csv 変換処理 CSVファイルによる属性指定... 5 砂防指定地 XML 作成説明書 2012/12/18 有限会社ジオ コーチ システムズ http://www.geocoach.co.jp/ info@geocoach.co.jp 砂防指定地 XML 作成 プログラムについての説明書です この説明書は次のバージョンに対応しています アプリケーション名バージョン日付 砂防指定地 XML 作成 7.0.5 2012/12/18 プログラムのインストールについては

More information

データベースアクセス

データベースアクセス データベースアクセスコンポーネント 1. 概要 データベースアクセスコンポーネントとは SQL データベースにアクセスして SQL 文を実行することによりデータベース検索を行う機能を提供するコンポーネントです また データベースアクセスコンポーネントでは データベースの構成情報 接続情報 エラー情報等を取得することも可能です データベースアクセスコンポーネントは アプリケーションビルダーのメニューから以下のように選びます

More information

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないもの

このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないもの 2 - SQL の最適化 このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないものとします お客様が本製品を運用した結果の影響については お客様が負うものとします

More information

Microsoft PowerPoint pptx

Microsoft PowerPoint pptx データベース 第 11 回 (2009 年 11 月 27 日 ) テーブル結合と集計 ( 演習 ) 第 11 回のテーマ 前回より シラバスから離れ 進捗状況に合わせて全体構成を変更しています テーマ1: テーブルの結合 テーマ 2: 結合した結果からの様々な検索 テーマ3: 集計の方法 今日学ぶべきことがら Select 文のさまざまな表現 Natural join sum(*) orrder

More information

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし

Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助とし Oracle 入門 ~ 研修受講後のスキルアップサポート ~ 対応バージョン :Oracle 10gR1 ~ 12cR1 本資料は アシスト Oracle 研修をご受講いただいたお客様からのご質問や 研修ではご案内できなかった情報などを FAQ にまとめたものです 研修受講後のスキルアップの一助として 是非お役立てください ご利用上の注意事項は最後のページにまとめられております ご確認のうえ ご利用ください

More information

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft Word - Android_SQLite講座_画面800×1280 Page 24 11 SQLite の概要 Android にはリレーショナルデータベースである SQLite が標準で掲載されています リレーショナルデータベースは データを表の形で扱うことができるデータベースです リレーショナルデータベースには SQL と呼ばれる言語によって簡単にデータの操作や問い合わせができようになっています SQLite は クライアントサーバ形式ではなく端末の中で処理が完結します

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション データベースシステム入門 7. 集計, 集約 1 リレーショナルデータベースシステム コンピュータ リレーショナルデータベース管理システム 記憶装置 リレーショナルデータベース あわせてリレーショナルデータベースシステム データの種類ごとに分かれた たくさんのテーブルが格納される 2 SQL をマスターするには SQL のキーワード create table テーブル定義 select 射影など from

More information

今さら聞けない!? Oracle入門 ~後編~

今さら聞けない!? Oracle入門 ~後編~ Oracle Direct Seminar 今さら聞けない!? Oracle 入門 ~ 後編 ~ 日本オラクル株式会社 Agenda 1. Oracle の基本動作 2. Oracle のファイル群 3. Oracle のプロセス群と専用メモリ領域. データベース内部動作 今さら聞けない!? オラクル入門 ~ 後編 ~. データベース内部動作 検索時の動作更新時の動作バックアップについて

More information

言語説明書 Linux版

言語説明書 Linux版 COBOL SQL アクセス言語説明書 Linux 版 はしがき 本書は,JIS の水準 2 に準拠する SQL データ操作言語 (SQL-DML) を COBOL プログラム中に 埋め込む形式でサポートする SQL プリコンパイラの文法について説明しています 本書の構成 本書の構成について説明します 本書は,3 つの章で構成しています それぞれの章の内容は, 次のとおりです 第 1 章 SQL 概説

More information

掲示板の閲覧 掲示板の閲覧 登録権または参照権のある掲示板グループの掲示版を閲覧することができます 各利用者の権限は 管理者によって設定されます 掲示板を閲覧する 1 掲示板画面を表示し 閲覧する掲示が含まれている掲示板グループ 掲示板の順にクリックします 掲示板画面の表示方法 ポータル画面の画面説

掲示板の閲覧 掲示板の閲覧 登録権または参照権のある掲示板グループの掲示版を閲覧することができます 各利用者の権限は 管理者によって設定されます 掲示板を閲覧する 1 掲示板画面を表示し 閲覧する掲示が含まれている掲示板グループ 掲示板の順にクリックします 掲示板画面の表示方法 ポータル画面の画面説 この章では 掲示板の利用方法などについてご案内しています 掲示板には文書を登録したり 返信を書き込むことができます 掲示板グループや掲示板は 管理者によって登録されます 掲示板の閲覧 140 掲示板の検索 146 掲示内容を転送する 148 掲示内容の登録 151 掲示内容をメールで登録する 158 掲示板の登録予約 159 掲示板の設定 163 掲示板の閲覧 掲示板の閲覧 登録権または参照権のある掲示板グループの掲示版を閲覧することができます

More information

PostgreSQL Plus 管理者ガイド

PostgreSQL Plus 管理者ガイド 2.4 旧バージョンからの移行 ここでは PostgreSQL Plus V1.0 および V1.1 から PostgreSQL Plus V2.0 にインスタンスの資産 を移行する手順について説明します PostgreSQL Plus V1.0 および V1.1 は PostgreSQL 7.3 をベースとしています また PostgreSQL Plus V2.0 は PostgreSQL 7.4

More information

PowerPoint Presentation

PowerPoint Presentation Webデザイン特別プログラムデータベース実習編 3 MySQL 演習, phpmyadmin 静岡理工科大学総合情報学部幸谷智紀 http://na-inet.jp/ RDB の基礎の基礎 RDB(Relational DataBase) はデータを集合として扱う データの取り扱いはテーブル (= 集合 ) の演算 ( 和集合, 積集合 ) と同じ データベースには複数のテーブルを作ることができる

More information

パスワード管理

パスワード管理 Cisco UCS パスワードの注意事項, 1 ページ Cisco UCS ユーザ名に関する注意事項, 3 ページ 変更間隔のパスワード変更の最大数の設定, 4 ページ パスワードの変更禁止間隔の設定, 5 ページ パスワード履歴カウントの設定, 6 ページ ローカル認証されたユーザのパスワード プロファイル, 7 ページ ローカル認証されたユーザのパスワード履歴のクリア, 8 ページ Cisco

More information

今さら聞けない!? Oracle入門 ~前編~

今さら聞けない!? Oracle入門 ~前編~ Oracle Direct Seminar 今さら聞けない!? Oracle 入門 ~ 前編 ~ 日本オラクル株式会社 Agenda 1. Oracle の基本動作 2. Oracle のファイル群 3. Oracle のプロセス群と専用メモリ領域 4. データベース内部動作 今さら聞けない!? オラクル入門 ~ 後編 ~ 4. データベース内部動作

More information

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第7版   None クイック検索検索 目次 Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 改訂情報概要レコードの追加 / 更新 / 削除レコードの編集レコードを削除するレコードの一括インポートとエクスポート日本語のキャプション表示 2 改訂情報 変更年月日 変更内容 2012-10-01 初版 2013-10-01 第 2 版下記が追加 変更されました 対応するフィールドの型

More information

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ 第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイルの作成方法 コンパイル方法について説明します IDL ファイルの作成にあたっては INTERSTAGE

More information

改訂履歴 日付バージョン記載ページ改訂内容 V2.1 - 初版を発行しました V3.1 P5 ドキュメントラベルが新規追加された事を追記 P7 P8 新しくなったラベルのツリー表示説明を追記 新しくなったラベルの作成 削除操作を追記 P9 ラベルのグループ

改訂履歴 日付バージョン記載ページ改訂内容 V2.1 - 初版を発行しました V3.1 P5 ドキュメントラベルが新規追加された事を追記 P7 P8 新しくなったラベルのツリー表示説明を追記 新しくなったラベルの作成 削除操作を追記 P9 ラベルのグループ 改訂履歴 日付バージョン記載ページ改訂内容 2012-10-23 V2.1 - 初版を発行しました 2013-08-30 V3.1 P5 ドキュメントラベルが新規追加された事を追記 P7 P8 新しくなったラベルのツリー表示説明を追記 新しくなったラベルの作成 削除操作を追記 P9 ラベルのグループ別参照権限設定操作を追記 2015-06-16 V5.0 P27 クラスター入力値を帳票備考にコピーする説明を追記

More information

SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNE

SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNE SQL 基礎 (6) JOIN 句 - データの結合 作成日 : 2016/02/22 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2016/02/22 新規作成 西村 はじめに この資料では 下記のような JOIN によるテーブル ( データ ) の結合について簡単に説明します INNER JOIN LEFT JOIN RIGHT JOIN 1 サンプルのデータ この資料では 下記のテーブルをもとに各クエリの結果がどうなるかを示します

More information

Web 環境におけるレイヤー別負荷の 2 違い DB サーバ AP サーバ 後ろのレイヤーほど負荷が高く ボトルネックになりやすい

Web 環境におけるレイヤー別負荷の 2 違い DB サーバ AP サーバ 後ろのレイヤーほど負荷が高く ボトルネックになりやすい pgpool-ii 最新情報 開発中のメモリキャッシュ機能 について SRA OSS, Inc. 日本支社石井達夫 Web 環境におけるレイヤー別負荷の 2 違い DB サーバ AP サーバ 後ろのレイヤーほど負荷が高く ボトルネックになりやすい 3 キャッシュを活用して負荷を軽減 AP サーバ DB サーバ AP サーバで結果をキャッシュして返す DB サーバで結果をキャッシュして返す 4 キャッシュの実装例

More information

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管

レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管 レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管理情報の英小文字対応 ~ 管理ホスト情報の表示 グループ情報と詳細情報の表示 ~ 検索条件設定時の一覧画面の操作

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンパイラとプログラミング言語 第 3 4 週 プログラミング言語の形式的な記述 2014 年 4 月 23 日 金岡晃 授業計画 第 1 週 (4/9) コンパイラの概要 第 8 週 (5/28) 下向き構文解析 / 構文解析プログラム 第 2 週 (4/16) コンパイラの構成 第 9 週 (6/4) 中間表現と意味解析 第 3 週 (4/23) プログラミング言語の形式的な記述 第 10 週

More information

Basic descriptive statistics

Basic descriptive statistics データ 情報基盤の活用事例 Scopus-NISTEP 大学 公的機関名辞書対応テーブルの活用事例 ( その 1) 2013 年 7 月 1 日 科学技術 学術政策研究所 科学技術 学術基盤調査研究室 1 < はじめに > はじめに 本資料には Scopus-NISTEP 大学 公的機関名辞書対応テーブルの活用事例をまとめています 本資料と併せて Scopus-NISTEP 大学 公的機関名辞書対応テーブル説明書

More information

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ はじめに コース概要と目的 効率良く Oracle データベースを使用するための運用管理について 管理タスクを行う上での考慮事項や注意 点を実習を通して習得します 受講対象者 データベース管理者 前提条件 データベース アーキテクチャ コースを受講された方 もしくは Oracle システム構成とデータベース構 造に関する知識をお持ちの方 テキスト内の記述について 構文 [ ] 省略可能 { A B

More information

3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 )

3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 ) 3 - 正しい SQL ( 方言を排除した SQL 文の記述方法 ) このドキュメントに記載されている情報 (URL 等のインターネット Web サイトに関する情報を含む ) は 将来予告なしに変更することがあります このドキュメントに記載された内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマイクロソフトはいかなる責任も負わないものとします お客様が本製品を運用した結果の影響については

More information

V-CUBE One

V-CUBE One V-CUBE One コンテンツ配信機能システム管理マニュアル ブイキューブ 2016/12/22 この文書は V-CUBE One コンテンツ配信機能のシステム管理マニュアルです 更新履歴 更新日 内容 2015/04/28 新規作成 2015/07/24 グループ管理のユーザーインタフェース変更に伴う修正 ユーザー管理のユーザーインタフェース変更に伴う修正 2015/09/30 連携サービス追加に伴う

More information

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版  

intra-mart Accel Platform — TableMaintenance ユーザ操作ガイド   第8版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 改訂情報概要レコードの追加 / 更新 / 削除レコードの編集レコードを削除するレコードの一括インポートとエクスポート日本語のキャプション表示 2 改訂情報 変更年月日 変更内容 2012-10-01 初版 2013-10-01 第 2 版下記が追加 変更されました 対応するフィールドの型 が追加されました

More information

マニュアル訂正連絡票

マニュアル訂正連絡票 < マニュアル訂正連絡票 > FUJITSU Software ASP システムコマンド集 V29 [J2K0592001A] 2018 年 12 月 25 日発行 修正箇所 ( 章節項 ): STRRDAT コマンドの CAPCNV のオペランド説明 CAPCNV( 整数型 ): 英小文字変換モードを指定する. @YES: 英小文字を英大文字に変換する. @NO: 英小文字をエラーにする. CAPCNV(

More information

Microsoft PowerPoint - mp11-06.pptx

Microsoft PowerPoint - mp11-06.pptx 数理計画法第 6 回 塩浦昭義情報科学研究科准教授 shioura@dais.is.tohoku.ac.jp http://www.dais.is.tohoku.ac.jp/~shioura/teaching 第 5 章組合せ計画 5.2 分枝限定法 組合せ計画問題 組合せ計画問題とは : 有限個の もの の組合せの中から, 目的関数を最小または最大にする組合せを見つける問題 例 1: 整数計画問題全般

More information

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装

More information

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt 開発編第 5 章補足 DB2 組み込み SQL 本書に含まれている情報は 正式な IBM のテストを受けていません また 明記にしろ 暗黙的にしろ なんらの保証もなしに配布されるものです この情報の使用またはこれらの技術の実施は いずれも 使用先の責任において行われるべきものであり それらを評価し 実際に使用する環境に統合する使用先の判断に依存しています それぞれの項目は

More information

スライド 1

スライド 1 XML with SQLServer ~let's take fun when you can do it~ Presented by 夏椰 ( 今川美保 ) Agenda( その 1) XML XML XSLT XPath XML Schema XQuery Agenda( その 2) SQLServer における XML XML 型 XML Schema XQuery & XPath チェック制約

More information

PowerPoint Presentation

PowerPoint Presentation UiPath 女性ユーザー コミュニティ第 1 回 Meetup 2018.9.12 (WED) 女性ユーザーコミュニティ概要 目的 : まだまだ男性と比べると数が少ない UiPath を使ってる女性ユーザーに対し 勉強 意見交換ができる場を提供し 女性ユーザーをさらに増やします 対象 : 仕事で UiPath を使っている これから使う予定の女性の方 コミュニティ内容 : 勉強会 交流会の実施 デベロッパーコミュニティと何が違うの?

More information

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計 データセンターの効率的な 資源活用のためのデータ収集 照会システムの設計 株式会社ネットワーク応用通信研究所前田修吾 2014 年 11 月 20 日 本日のテーマ データセンターの効率的な資源活用のためのデータ収集 照会システムの設計 時系列データを効率的に扱うための設計 1 システムの目的 データセンター内の機器のセンサーなどからデータを取集し その情報を元に機器の制御を行うことで 電力消費量を抑制する

More information

キーワードと検索条件について キーワード調べたい言葉 ( 検索語 ) を入力します スペースで区切って最大 0 個まで入力可能です 使用できる文字は漢字 ひらがな カタカナ 英数字です ( 記号 旧漢字も対応しています ) 全角 / 半角 大文字 / 小文字のどちらで入力しても区別なく検索されます

キーワードと検索条件について キーワード調べたい言葉 ( 検索語 ) を入力します スペースで区切って最大 0 個まで入力可能です 使用できる文字は漢字 ひらがな カタカナ 英数字です ( 記号 旧漢字も対応しています ) 全角 / 半角 大文字 / 小文字のどちらで入力しても区別なく検索されます 雑誌 ( および雑誌扱いの資料 ) をタイトル単位で検索します 各号の内容 ( 特集記事 目次など ) で検索する場合は 図書 / 雑誌 ( 全資料 ) 横断検索 をご利用ください 検索手順 :. キーワードに検索語を入力します. 必要に応じて検索条件 ~ を選択します.ISSN/ 雑誌コードは単独検索 6 の欄に入力します. 検索ボタン 7 をクリックすると検索が始まります. 該当の 雑誌タイトル一覧

More information

基本サンプル

基本サンプル SQLCompiler for LINQ(C#) のサンプル ( 基本サンプル ) < 一覧表 > ファイル名 : 前版サンプルから更新したファイル名 ファイル名 説明 リンク No1.linq 単一テーブルを使用する 表 1 No2.linq 2つのテーブルのクロス結合を使用する 表 2 No3.linq 2つのテーブルの内部結合を使用する 表 3 No4.linq No3.linq で GROUP

More information

1. 主な機能追加項目 以下の検索項目をサポートしました 書誌 全文検索コマンド検索 国内 査定日 最新の査定日 ( 登録査定日または拒絶査定日 ) を検索します 査定種別 最新の登録 拒絶査定 または査定なしを検索します 審査最終処分日 最新の審査最終処分日を検索します 審査最終処分種別 最新の審

1. 主な機能追加項目 以下の検索項目をサポートしました 書誌 全文検索コマンド検索 国内 査定日 最新の査定日 ( 登録査定日または拒絶査定日 ) を検索します 査定種別 最新の登録 拒絶査定 または査定なしを検索します 審査最終処分日 最新の審査最終処分日を検索します 審査最終処分種別 最新の審 日立特許情報提供サービス Sharerese arch 01-76Ver. 機能のご紹介 2011,HitachiInformationSystems,LtdAllRigh tsrese rved 1. 主な機能追加項目 以下の検索項目をサポートしました 書誌 全文検索コマンド検索 国内 査定日 最新の査定日 ( 登録査定日または拒絶査定日 ) を検索します 査定種別 最新の登録 拒絶査定 または査定なしを検索します

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション No 区分実行版 dbsheetclient2013 リリースノート Project Editor 内容 2012/5/29 現在 管理 V 1 新機能 タスクタイプ 参照ブックを開く (62201) に以下の機能を追加しました 1 オープンしたブックのファイル名出力 指定したセルにオープンした Excel ブックのファイル名 ( パスを含む ) を出力します 2 オープンしたブックの上書き保存を許可する

More information

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太 ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : 095739 K 氏名 : 當銘孔太 1. UNIX における正規表現とは何か, 使い方の例を挙げて説明しなさい. 1.1 正規表現とは? 正規表現 ( 正則表現ともいう ) とは ある規則に基づいて文字列 ( 記号列 ) の集合を表す方法の 1 つです ファイル名表示で使うワイルドカードも正規表現の兄弟みたいなもの

More information

OracleDBA(パフォーマンスチューニング(SQL編) - コピー

OracleDBA(パフォーマンスチューニング(SQL編) - コピー チューニング検討 体感的に遅い SQL を特定出来 Y N 一定期間の統計から抽出す N Y SQL トレース &TKPROF STATSPACK EXPLAIN PLAN コマンド 現在の状況から抽出する N Y AUTOTRACE 動的パフォーマンスヴュー V$SQL V$SQL_TEXT V$SQLL_PLAN 1 2) V$ 表 ( 動的パフォーマンスヴュー ) 1 使用するヴュー V$SQL

More information

2. 目的 1RationalRose を利用する場合にプログラム仕様書としての最低限必要な記述項目を明確にする 2 プログラム仕様書として記載内容に不足がない事をチェックする 3UML の知識があるものであれば 仕様書の内容を理解できること 4Rose にて入力した内容を SoDaWord を利用

2. 目的 1RationalRose を利用する場合にプログラム仕様書としての最低限必要な記述項目を明確にする 2 プログラム仕様書として記載内容に不足がない事をチェックする 3UML の知識があるものであれば 仕様書の内容を理解できること 4Rose にて入力した内容を SoDaWord を利用 プログラム仕様書 (UML 表記法 ) ガイドライン 本仕様書に UML(Rational Rose 使用 ) を用いてプログラム仕様書を作成する際のガイドラインを記す 1. ドキュメントの様式について 1 ドキュメントは制御単位で作成する 2 表紙 及び変更履歴は SWS にて指定されたものを付加すること 3 下記の目次内で指定している UML 図 記述項目は必須項目とする 4SoDa にてドキュメントを出力する場合は

More information

Arcserve Replication/High Availability 製品の仕組み

Arcserve Replication/High Availability  製品の仕組み 目次 1. Arcserve Replication/High Availability 共通の仕組み 1-1: 同期とレプリケーションについて 1-2: 同期の仕組み ファイルレベル同期 ブロックレベル同期 オフライン同期 1-3: レプリケーションの仕組み 2. Arcserve High Availability スイッチオーバーの仕組み 2-1: IP 移動 2-2: コンピュータ名の切り替え

More information

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058 1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058 2 Excel 1 SQL 1 SQL Server sp_executesql Oracle SQL

More information

NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438

NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438 NEC COBOL SQL アクセス Server Runtime V1.0 COBOL SQL アクセス Server Runtime V1.0 (1 年間保守付 ) COBOL SQL アクセス Server Runtime V1.0 (1 年間時間延長保守付 ) セットアップカード SL438730U01-1 ごあいさつ このたびは COBOL SQL アクセス Server Runtime

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 多分岐選択 条件式 If Then Else IIF Select Switch 今日の目的 Dim n As Long n = 10 If n = 10 Then 条件式 Debug.Print ゆっくりしていってね! End If 比較演算子 その他 よく使用する演算子 文字列型にたいする条件式 条件式 オブジェクト型 バリアント型に対する条件式 比較演算子 = 等しい 等しくない >=

More information

セットアップカード

セットアップカード NEC COBOL SQL アクセス Client Runtime Ver1.0 COBOL SQL アクセス Client Runtime Ver1.0 (1 年間保守付 ) COBOL SQL アクセス Client Runtime Ver1.0 (1 年間時間延長保守付 ) セットアップカード ごあいさつ このたびは COBOL SQL アクセス Client Runtime Ver1.0 (

More information

Microsoft Word - SQL.rtf

Microsoft Word - SQL.rtf データベース資料古原作成 1 データベースとは データ管理の専用システムのことをデータベースと呼ぶ データをさまざまな形で格納し 取り出しやすくしている データベースの種類 カード型データベース リレーショナルデータベース カード型データベースはカードを単位としてデータを入力する カード一枚に各項目があり その内容を記述する カードは表で言えば一行に該当する リレーショナルデータベースでは複数の表を使うことが出来る

More information

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO

復習 (SQL 文 ) 3/6 復習 (SQL 文 ) 4/6 表の作成 CREATE TABLE...; 表の削除 DROP TABLE テーブル名 ; 表内のデータが全て消えてしまう. 表内のデータを得る SELECT 列名 FROM 表名...; 表にデータを挿入する. INSERT INTO SQLite SQLite3 http://www.ns.kogakuin.ac.jp/~ct13140/prog/ オープンソース ( フリー )RDBMS 実装の 1 個 http://www.sqlite.org/ 現在,3.6 が最新版. SQLite 2.x と SQLite 3.x が有名. 特徴 RDBMS サーバプロセスの起動が不要. 1 データベース,1 ファイル で格納.. つまり

More information

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10 PASSEXAM http://www.passexam.jp Exam : 70-461J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10 1. あなたが ContosoDb 付きの Microsoft SQL Server 2012 のデータベースを管理します 展示に示すように テーブルが定義されています ( 図表ボタンをクリックします

More information

Microsoft PowerPoint - 05.pptx

Microsoft PowerPoint - 05.pptx アルゴリズムとデータ構造第 5 回 : データ構造 (1) 探索問題に対応するデータ構造 担当 : 上原隆平 (uehara) 2015/04/17 アルゴリズムとデータ構造 アルゴリズム : 問題を解く手順を記述 データ構造 : データや計算の途中結果を蓄える形式 計算の効率に大きく影響を与える 例 : 配列 連結リスト スタック キュー 優先順位付きキュー 木構造 今回と次回で探索問題を例に説明

More information

スクールCOBOL2002

スクールCOBOL2002 3. 関連資料 - よく使われる機能の操作方法 - (a) ファイルの入出力処理 - 順ファイル等を使ったプログラムの実行 - - 目次 -. はじめに 2. コーディング上の指定 3. 順ファイルの使用方法 4. プリンタへの出力方法 5. 索引ファイルの使用方法 6. 終わりに 2 . はじめに 本説明書では 簡単なプログラム ( ファイル等を使わないプログラム ) の作成からコンパイル 実行までの使用方法は既に理解しているものとして

More information

基本サンプル

基本サンプル SQLCompiler for LINQ(C#) のサンプル (LINQPad 用 LINQ to Entities 基本サンプル ) 本サンプルで使用した Visual Studio プロジェクトの pubs データベースの概念モデルは 以下のテーブル名とカラム名が 直接 SQL Sever へクエリする場合と異なるので が補正されています テーブル名が異なるもの employee employees

More information

PowerPoint Presentation

PowerPoint Presentation ORACLE MASTER Bronze Oracle Database 11g スキルチェック解説 日本オラクル株式会社オラクルユニバーシティ 以下の事項は 弊社の一般的な製品の方向性に関する概要を説明するものです また 情報提供を唯一の目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため

More information

データベース暗号化ツール「D’Amo」性能検証

データベース暗号化ツール「D’Amo」性能検証 平成 29 年 5 月 31 日 株式会社東和コンピュータマネジメント 概要 測定環境 測定要件 テーブル構成 測定手順 測定結果 システムログ 統計レポート 考察 感想 データベース暗号化ツール D Amo の導入を検討するにあたり NEC 製サーバ Express 上におけるツール適用後の動作確認ならびに処理性能の増加傾向を把握する目的で 本性能測定を実施する 測定環境 ハードウェア,OS, データベース

More information

HiRDB アプリケーション開発ガイド

HiRDB アプリケーション開発ガイド 株式会社日立製作所情報 通信システム社 IT プラットフォーム事業本部開発統括本部ソフトウェア本部発行 HiRDB アプリケーション開発ガイド < 他社所有商標に対する表示 > Eclipse は, 開発ツールプロバイダのオープンコミュニティである Eclipse Foundation, Inc. により構築された開発ツール統合のためのオープンプラットフォームです Microsoft, Windows,

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

関数とは 関数とは 結果を得るために 処理を行う仕組み です Excel2010 には あらかじめ関数が数式として組み込まれています たとえば SUM 関数 は 指定した値をすべて合計する 仕組みです 長い計算式や複雑な計算式を作成せずに 簡単に結果を求めることができます 例合計 =A1+A2+A3

関数とは 関数とは 結果を得るために 処理を行う仕組み です Excel2010 には あらかじめ関数が数式として組み込まれています たとえば SUM 関数 は 指定した値をすべて合計する 仕組みです 長い計算式や複雑な計算式を作成せずに 簡単に結果を求めることができます 例合計 =A1+A2+A3 エクセル Ⅱ( 中級 ) 福岡市私立幼稚園連盟 Microsoft Excel 2010 Ver,1.0 関数とは 関数とは 結果を得るために 処理を行う仕組み です Excel2010 には あらかじめ関数が数式として組み込まれています たとえば SUM 関数 は 指定した値をすべて合計する 仕組みです 長い計算式や複雑な計算式を作成せずに 簡単に結果を求めることができます 例合計 =A1+A2+A3+A4+A5+A6+A7+A8+A9

More information

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成 KDDI ホスティングサービス (G120, G200) ブック ASP.NET 利用ガイド ( ご参考資料 ) rev.1.0 KDDI 株式会社 1 ( 目次 ) 1. はじめに... 3 2. 開発環境の準備... 3 2.1 仮想ディレクトリーの作成... 3 2.2 ASP.NET のWeb アプリケーション開発環境準備... 7 3. データベースの作成...10 3.1 データベースの追加...10

More information

CMP2-3SQL2b.pptx

CMP2-3SQL2b.pptx サーバサイドプログラミング 3. SQL コンテンツメディアプログラミング演習 Ⅱ 2014 年 菊池, 斉藤 SQL 概要 n SQL (Structured Language) q リレーショナルデータベースの為のプログラミング言語. q IBM が提案し,1987 に ISO 国際標準化. q データ定義, データベース操作 ( 挿入, 削除, 選択 ),( トランザクション管理機能 ) q

More information

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組 レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン HULFT BB クライアント for Windows Type BB1 6.3.0 HULFT BB クライアント for Windows Type BB2 6.3.0 < 対応 OS> Windows2000, WindowsXP, WindowsServer2003 < 追加機能一覧 > HULFT BB クライアント 管理番号 内容

More information

ログインおよび設定

ログインおよび設定 この章は 次の項で構成されています の概要, 1 ページ admin パスワードのリセット, 3 ページ パスワードと共有秘密のガイドライン, 3 ページ 共有秘密のリセット, 4 ページ の概要 Cisco UCS Central GUI および Cisco UCS Central CLI の両方を使用して Cisco UCS Central にログ インできます 両方のインターフェイスを使用すると

More information

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP

Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest & Valid 1z0-882-JP itexamdump 최고이자최신인 IT 인증시험덤프 http://www.itexamdump.com 일년무료업데이트서비스제공 Exam : 1z0-882 日本語 (JPN) Title : Oracle Certified Professional, MySQL 5.6 Developer Vendor : Oracle Version : DEMO 1 / 4 Get Latest

More information

9 WEB監視

9  WEB監視 2018/10/31 02:15 1/8 9 WEB 監視 9 WEB 監視 9.1 目標 Zabbix ウェブ監視は以下を目標に開発されています : ウェブアプリケーションのパフォーマンスの監視 ウェブアプリケーションの可用性の監視 HTTPとHTTPSのサポート 複数ステップで構成される複雑なシナリオ (HTTP 要求 ) のサポート 2010/08/08 08:16 Kumi 9.2 概要 Zabbix

More information

(C) Copyright CANVASs Co

(C) Copyright CANVASs Co (C) Copyright CANVASs Co., Ltd. ===================================================== ソフト名 SST G1Pro アップデートインストーラ 対象製品 SST G1 Pro 日本語版 / 英語版 登録名 SST G1 Pro Ver.1.1.39 アプリケーション名 setup.exe 著作権者 株式会社カンバス

More information

改訂履歴 項番版数作成日 / 改訂日変更箇所変更内容. 平成 28 年 5 月 3 日新規章構成の変更, 分冊化に伴い新規作成 (i)

改訂履歴 項番版数作成日 / 改訂日変更箇所変更内容. 平成 28 年 5 月 3 日新規章構成の変更, 分冊化に伴い新規作成 (i) 特許庁アーキテクチャ標準仕様書 ( 参考 ) 処理シーケンスサンプル集 第. 版 平成 28 年 6 月 特許庁 改訂履歴 項番版数作成日 / 改訂日変更箇所変更内容. 平成 28 年 5 月 3 日新規章構成の変更, 分冊化に伴い新規作成 (i) はじめに () 本書の位置づけ 本書は, 特許庁アーキテクチャ標準仕様書 に基づきシステムの動的な振る舞いを処理シーケンスとして定める際に参考とするサンプル集である

More information

模擬試験問題(第1章~第3章)

模擬試験問題(第1章~第3章) 基本情報技術者試験の練習問題 - 第 8 回 この問題は平成 19 年度秋期の問題から抜粋しています 問 1 次のプログラムの説明及びプログラムを読んで, 設問 1,2 に答えよ プログラムの説明 スタックを使って, 実数値を 10 進数字列 ( 文字列 ) に変換する副プログラム FloatFormat である (1) FloatFormat は, 実数 Float の値を 10 進数字列に変換し,

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

Microsoft PowerPoint - MySQL-backup.ppt

Microsoft PowerPoint - MySQL-backup.ppt MySQL バックアップ リカバリ概要 オープンソース コンピテンシコンピテンシ センター日本ヒューレットパッカードヒューレットパッカード株式会社 2006 年 12 月 6 日 2006 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice

More information

アプリケーション インスペクションの特別なアクション(インスペクション ポリシー マップ)

アプリケーション インスペクションの特別なアクション(インスペクション ポリシー マップ) CHAPTER 2 アプリケーションインスペクションの特別なアクション ( インスペクションポリシーマップ ) モジュラポリシーフレームワークでは 多くのアプリケーションインスペクションで実行される特別なアクションを設定できます サービスポリシーでインスペクションエンジンをイネーブルにする場合は インスペクションポリシーマップで定義されるアクションを必要に応じてイネーブルにすることもできます インスペクションポリシーマップが

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 動作検証レポート dd 2016 年 6 月 株式会社高速屋 1 刻々と発生するビッグデータのオンタイム アナリシス : 動作検証概要 検証対象 : 1. ファイル処理 入力 CSV ファイルを読込み 処理結果を CSV ファイルに出力 2. インメモリ処理 事前にインメモリ化されたデータに対してクエリ (Select 文 ) を実行 1. ファイル処理 1-1. 集計 ロード データ :POS 明細件数

More information

<4D F736F F F696E74202D20352D335F8D5C90AC CF909482CC90B690AC82C695D28F572E707074>

<4D F736F F F696E74202D20352D335F8D5C90AC CF909482CC90B690AC82C695D28F572E707074> RD_301 構成要素一覧と検索 から構成要素の編集辞書 ( 削除 ) を作る 作成 ( 編集 ) する削除辞書を開きます 構成要素を検索します ドラック & ドロップでも OK 範囲を選択して右クリック 右クリック 削除辞書に登録 ( 追加 ) したい構成要素を選択しコピーします 削除辞書に追加 ( 貼りつけ ) ます Step5. 削除辞書に構成要素が登録 ( 追加 ) されます 構成要素一覧と検索

More information

概要 ABAP 開発者が SAP システム内の SAP ソースまたは SAP ディクショナリーオブジェクトを変更しようとすると 2 つのアクセスキーを入力するよう求められます 1 特定のユーザーを開発者として登録する開発者キー このキーは一度だけ入力します 2 SAP ソースまたは SAP ディクシ

概要 ABAP 開発者が SAP システム内の SAP ソースまたは SAP ディクショナリーオブジェクトを変更しようとすると 2 つのアクセスキーを入力するよう求められます 1 特定のユーザーを開発者として登録する開発者キー このキーは一度だけ入力します 2 SAP ソースまたは SAP ディクシ オンラインヘルプ :SAP ソフトウェア変更登録 (SSCR) キーの登録 目次 概要... 2 参考リンク... 3 アプリケーションの起動... 4 アプリケーションとメインコントロールの概要... 5 キーリストのカスタマイズ... 7 リストのフィルタリング... 7 表のレイアウトのカスタマイズ... 8 新しい開発者の登録... 10 新しいオブジェクトの登録... 12 特定のインストレーションから別のインストレーションに個々の

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

Microsoft Word - sample_adv-programming.docx

Microsoft Word - sample_adv-programming.docx サンプル問題 以下のサンプル問題は包括的ではなく 必ずしも試験を構成するすべての種類の問題を表すとは限りません 問題は 個人が認定試験を受ける準備ができているかどうかを評価するためのものではありません SAS Advanced Programming for SAS 9 問題 1 次の SAS データセット ONE と TWO があります proc sql; select one.*, sales

More information

生存確認調査ツール

生存確認調査ツール Hos-CanR.0 独自項目運用マニュアル FileMaker pro を使用 登録作業者用 Ver. バージョン改訂日付改訂内容 Ver. 00//5 初版 Ver. 0// FileMaker Pro の動作確認の追加 はじめに 本マニュアルについて Hos-CanR.0 院内がん登録システム ( 以降は Hos-CanR.0 と記述します ) では 独自項目の作成 登録 サポートはなくなり

More information

5. エイジレス80 と Collabo80+ のデータ不整合の解消手順について エイジレス80 と Collabo80+ で会員連携を開始する前に 以下のフローにて データ差異が存在しない状態にしてください 連携開始時には エイジレス80 側を正とさせていただきますので Collabo80+ 側の

5. エイジレス80 と Collabo80+ のデータ不整合の解消手順について エイジレス80 と Collabo80+ で会員連携を開始する前に 以下のフローにて データ差異が存在しない状態にしてください 連携開始時には エイジレス80 側を正とさせていただきますので Collabo80+ 側の シルバー人材センター連合会 シルバー人材センター 御中 NRI 社会情報システム株式会社 エイジレス 80 Collabo80+ 開発担当 エイジレス 80 アクティブ と Collabo80+ の会員データ連携について 拝啓時下益々ご隆昌のこととお慶び申し上げます 平素は エイジレス 80アクティブ ( 以下 エイジレス 80 ) ならびに Collabo80+ をご利用賜り 厚く御礼申し上げます

More information