Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


2.24.4 SQL最適化指定の例

SQL最適化指定の使用例を次に示します。

  1. SELECT文中に,使用インデクスのSQL最適化指定を指定します。このとき,在庫表(ZAIKO)の検索に,インデクス(IDX1)を使用します。

    SELECT SNAME FROM ZAIKO WITH INDEX (IDX1)
      WHERE TANKA <= 500
  2. SELECT文中に,使用インデクスのSQL最適化指定を指定します。このとき,在庫表(ZAIKO)の検索に,複数のインデクス(IDX1,IDX2)を使用します。

    SELECT SNAME FROM ZAIKO WITH INDEX (IDX1,IDX2)
      WHERE TANKA <= 500 OR ZSURYO > 100
  3. SELECT文中に,使用インデクスのSQL最適化指定を指定します。このとき,在庫表(ZAIKO)定義時に,PRIMARY KEYを指定して定義されたインデクスを使用します。

    SELECT SNAME FROM ZAIKO WITH INDEX (PRIMARY KEY)
      WHERE TANKA <= 500
  4. SELECT文中に,使用インデクスのSQL最適化指定を指定します。このとき,在庫表(ZAIKO)の検索に,インデクス利用を抑止(テーブルスキャン)します。

    SELECT SNAME FROM ZAIKO WITHOUT INDEX
      WHERE TANKA <= 500
  5. SELECT文中に,結合方式のSQL最適化指定を指定します。このとき,内結合の結合方式を,ネストループジョインにします。

    SELECT ZAIKO.SCODE,ZAIKO.SNAME,JUTYU.TCODE
      FROM ZAIKO INNER JOIN BY NEST JUTYU
        ON ZAIKO.SCODE = JUTYU.SCODE
  6. SELECT文中に,結合方式のSQL最適化指定を指定します。このとき,外結合の結合方式を,ハッシュジョインにします。

    SELECT ZAIKO.SCODE,ZAIKO.SNAME,JUTYU.TCODE
      FROM ZAIKO LEFT OUTER JOIN BY HASH JUTYU
        ON ZAIKO.SCODE = JUTYU.SCODE
  7. SELECT文中に,結合方式のSQL最適化指定を指定します。このとき,内結合(INNER省略)の結合方式を,マージジョインにします。

    SELECT ZAIKO.SCODE,ZAIKO.SNAME,JUTYU.TCODE
      FROM ZAIKO JOIN BY MERGE JUTYU
        ON ZAIKO.SCODE = JUTYU.SCODE
  8. SELECT文中に,副問合せ実行方式のSQL最適化指定を指定します。このとき,副問合せの実行方式を,ハッシュ実行にします。

    SELECT SNAME FROM ZAIKO
      WHERE SCODE =ANY
        (HASH SELECT SCODE FROM JUTYU
           WHERE TCODE = '302S')
  9. SELECT文中に,副問合せ実行方式のSQL最適化指定を指定します。このとき,副問合せの実行方式を,ハッシュ実行以外(この例では,作業表実行,又は作業表ATS実行となる)にします。

    SELECT SNAME FROM ZAIKO
      WHERE SCODE =ANY
        (NO HASH SELECT SCODE FROM JUTYU
          WHERE TCODE = '302S')
  10. 使用インデクスのSQL最適化指定を,「/*>>」と「<<*/」で囲んで指定します。

    SELECT SNAME FROM ZAIKO /*>> WITH INDEX (IDX1) <<*/
      WHERE TANKA <= 500
  11. 結合方式のSQL最適化指定を,「/*>>」と「<<*/」で囲んで指定します。

    SELECT ZAIKO.SCODE,ZAIKO.SNAME,JUTYU.TCODE
      FROM ZAIKO INNER JOIN /*>> BY NEST <<*/ JUTYU
        ON ZAIKO.SCODE = JUTYU.SCODE
  12. 副問合せ実行方式のSQL最適化指定を,「/*>>」と「<<*/」で囲んで指定します。

    SELECT SNAME FROM ZAIKO
      WHERE SCODE =ANY
        (/*>> HASH <<*/ SELECT SCODE FROM JUTYU
          WHERE TCODE = '302S')
  13. SELECT文中に,結合方式のSQL最適化指定と使用インデクスのSQL最適化指定を指定します。このとき,在庫表(ZAIKO)の検索にインデクス(IDX3)を使用し,内結合(INNER省略)の結合方式をハッシュジョインにします。

    SELECT ZAIKO.SCODE,ZAIKO.SNAME,JUTYU.TCODE
      FROM ZAIKO WITH INDEX (IDX3) JOIN BY HASH JUTYU
        ON ZAIKO.SCODE = JUTYU.SCODE
  14. SELECT文中に,結合方式のSQL最適化指定と使用インデクスのSQL最適化指定を,それぞれ「/*>>」と「<<*/」で囲んで指定します。このとき,在庫表(ZAIKO)の検索にインデクス(IDX3)を使用し,内結合(INNER省略)の結合方式をハッシュジョインにします。

    SELECT ZAIKO.SCODE,ZAIKO.SNAME,JUTYU.TCODE
      FROM ZAIKO /*>> WITH INDEX (IDX3) <<*/ JOIN /*>> BY HASH <<*/ JUTYU
        ON ZAIKO.SCODE = JUTYU.SCODE