スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
SQL最適化モードの特徴を次の表に示します。
表4-5 SQL最適化モードの特徴
SQL最適化モード | 説明 | 長所 | 短所 | 選択方法 |
---|---|---|---|---|
コストベース最適化モード1 | バージョン06-00より前のHiRDBのコストベース最適化処理方式です。バージョン06-00以降のHiRDBでも使用できます。 | バージョン06-00より前のHiRDBからバージョンアップしても,バージョンアップ前と同じアクセスパスで検索できます。 なお,高速に検索する目的として,アクセスパスを変更することもあります。 |
候補とするアクセスパスの種類が少ないため(ハッシュジョインなどの機能を候補として選択しません),必ずしも最適なアクセスパスが選択されるとは限りません。 | SQL拡張最適化オプションを指定しないか,又はSQL拡張最適化オプションのコストベース最適化モード2の適用の指定を外します。 なお,SQL文によっては,常にコストベース最適化モード2を使用する場合があります。詳細については,「(2) 強制的にコストベース最適化モード2を適用するSQL」を参照してください。 |
コストベース最適化モード2 | バージョン06-00以降のHiRDBで,高速に検索できるようにしたコストベース最適化処理方式です。 | 結合検索,副問合せ処理に対して,ハッシングを組み合わせたアクセスパスを候補として選択するため,高速に検索できます。 | 複雑な最適化処理をするため,最適化処理に時間が掛かります。 | SQL拡張最適化オプションにコストベース最適化モード2の適用を指定します。 |
コストベース最適化モード1を使用していても,コストベース最適化モード2が強制的に適用される場合があります。強制的にコストベース最適化モード2が適用されるSQLを次に示します。
それぞれのSQLに該当する適用条件及び例を次に示します。
UPDATE T1 SET(C1,C2)=(SELECT MAX(C1),MAX(C2) FROM T2) WHERE C3=1 注 下線部分が該当箇所です。
SELECT T1.C1,T2.C2 FROM T1 INNER JOIN T2 ON T1.C1=T2.C1 注 下線部分が該当箇所です。
SELECT T1.C1,T2.C2 FROM T1 LEFT OUTER JOIN T2 ON T1.C1=T2.C1, T3 WHERE T1.C1=T3.C1 注 下線部分が該当箇所です。
SELECT T1.C1,T2.C2,T3.C2 FROM T1 LEFT OUTER JOIN (T2 LEFT OUTER JOIN T3 ON T2.C1=T3.C1) ON T1.C1=T3.C1 注 下線部分が該当箇所です。
SELECT COUNT(*) FROM (SELECT C1 FROM T1 UNION SELECT C1 FROM T2) 注 下線部分が該当箇所です。
SELECT AVG(DISTINCT C1+C2) FROM T1 注 下線部分が該当箇所です。
WITH W1(C1,C2) AS (SELECT C1,COUNT(*) FROM T1 GROUP BY C1) SELECT W1.C1,W1.C2,T2.C2 FROM W1 LEFT JOIN T2 ON W1.C1=T2.C1 注 下線部分が該当箇所です。
SELECT SUBSTR(C1,1,500) FROM T1 注 下線部分が該当箇所です。C1がBLOB型の列です。
UPDATE T1 SET C1=C1||? 注 下線部分が該当箇所です。C1がBLOB型の列です。
UPDATE T1 SET C1=C2 注 下線部分が該当箇所です。C1,C2がBLOB型の列です。
SELECT T1.C1,FT2.C2 FROM T1 LEFT OUTER JOIN FT2 ON T1.C1=FT2.C1 注 下線部分が該当箇所です。FT2は外部表です。
SELECT T1.C1 FROM T1 WITH INDEX(idx1) WHERE T1.C2<=500 注 下線部分が該当箇所です。
SELECT T1.C1,T2.C2 FROM T1 INNER JOIN BY NEST T2 ON T1.C1=T2.C1 注 下線部分が該当箇所です。
SELECT T1.C1 FROM T1 WHERE T1.C1=ANY (HASH SELECT T2.C1 FROM T2 WHERE T2.C2='302S') 注 下線部分が該当箇所です。
SELECT C1,C2 FROM T1 ORDER BY C2 注 下線部分が該当箇所です。C2はVARCHAR(300)の列です。
SELECT C1,C3||C4 FROM T1 ORDER BY 2 注 下線部分が該当箇所です。C3||C4はNCHAR(150)の値式です。
SELECT SCODE,ZSURYO FROM ZAIKO WHERE ZSURYO>20 ORDER BY 2,1 LIMIT 10 注 下線部分が該当箇所です。
SELECT C1 FROM T1 注 下線部分が該当箇所です。C1はBINARY型の列です。
WITH Q1(QC1,QC2) AS (SELECT C1,C2 FROM V1 GROUP BY C1,C2) SELECT AVG(QC1),QC2 FROM Q1 GROUP BY QC2 注 下線部分が該当箇所です。V1は内部導出表となるビュー表です。
SELECT * FROM T1 注 下線部分が該当箇所です。T1はマトリクス分割表です。
SELECT * FROM T1 LEFT JOIN T2 ON T1.C1=T2.C1 WHERE T1.C1=ANY(SELECT C1 FROM T3) 注 下線部分が該当箇所です。
SELECT MIN(FLAT(C1)) FROM T1 注 下線部分が該当箇所です。C1は繰返し列です。
SELECT * FROM T1 WHERE (C1,C2,C3)>(1,2,3) 注 下線部分が該当箇所です。
SELECT CASE(SELECT C1 FROM T1) WHEN 1 THEN C2 ELSE C1 END FROM T1 注 下線部分が該当箇所です。
SELECT POSITION(? AS BLOB(1K) IN C1) FROM T1 注 下線部分が該当箇所です。C1はBLOB型の列です。
UPDATE T1 SET C1=? 注 下線部分が該当箇所です。T1は被参照表又は参照表です。
INSERT INTO T1(C1,C2) VALUES(?,?) 注 下線部分が該当箇所です。C1は検査制約を定義した列です。
SELECT C1,COUNT(*) FROM T1 GROUP BY C1 注 下線部分が該当箇所です。T1.C1が256バイト以上の文字列です。
SELECT MIN(C1) FROM T1 注 下線部分が該当箇所です。T1.C1が256バイト以上の文字列です。
WITH W1(C1,C2) AS (SELECT DISTINCT C1,C2 FROM T1) SELECT C2,COUNT(*) FROM W1 GROUP BY C2 注 下線部分が該当箇所です。T1.C1が256バイト以上の文字列です。
例1: UPDATE T1 SET C1=NULL WHERE C1=(SELECT MIN(C1) FROM T1) 例2: DELETE FROM T1 WHERE C1=(SELECT MIN(C1) FROM T1) 例3: INSERT INTO T1(C1,C2) VALUES((SELECT MIN(C1) FROM T1),NULL) 注 下線部分が該当箇所です。
INSERT INTO T1(C1,C2) SELECT C1,C2+1 FROM T1 注 下線部分が該当箇所です。
SELECT C1,C2 FROM T1(FLAT(C1,C2)) WHERE C1<10 AND C2 >20 注 下線部分が該当箇所です。C1,C2は繰返し列です。
SELECT SCODE, ZSURYO FROM ZAIKO WHERE ZSURYO > 20ORDER BY 2, 1 LIMIT 20, 10 注 下線部分が該当箇所です。
SELECT AVG(QC1),QC2 FROM(SELECT C1,C2 FROM V1 GROUP BY C1,C2) AS Q1(QC1,QC2) 注 下線部分が該当箇所です。V1は内部導出表となるビュー表です。
WITH V1(C1,C2) AS (SELECT C1,C2 FROM T1 UNION SELECT C1,C2 FROM T2) SELECT C1 FROM V1 WHERE C2>0 注 下線部分が該当箇所です。
INSERT INTO T3 (C1,C2) SELECT C1,C2 FROM T1 UNION ALL SELECT C1,C2 FROM T2 注 下線部分が該当箇所です。
SELECT C1, C2 FROM T3 WHERE EXISTS(SELECT C1 FROM T1 EXCEPT SELECT C1 FROM T2) 注 下線部分が該当箇所です。
SELECT C1,C2,COUNT(*) OVER() FROM T1 注 下線部分が該当箇所です。
SELECT C1 FROM T1 WHERE C2 SIMILAR TO '%(b|g)%' 注 下線部分が該当箇所です。
SELECT C1 FROM T1 WHERE XMLEXISTS('/書籍情報[価格=1000]' PASSING BY VALUE C2) 注 下線部分が該当箇所です。T1.C2がXML型の列です。
SELECT C1, C2 FROM T1 WHERE C1='HiRDB' 注 下線部分が該当箇所です。T1.C1が文字集合を指定した列です。
SELECT C1 FROM T1 IN ('RU01,RU02') WHERE C1='HiRDB' 注 下線部分が該当箇所です。RU01,RU02がアクセス先のRDエリアです。
SQL最適化オプション,SQL拡張最適化オプションが有効となるSQL最適化モードを次の表に示します。
表4-6 SQL最適化オプション,SQL拡張最適化オプションが有効となるSQL最適化モード
SQL最適化モード | SQL最適化オプション | SQL拡張最適化オプション |
---|---|---|
コストベース最適化モード1 | ○ | × |
コストベース最適化モード2 | ○ | ○ |
アクセスパス表示ユティリティを使用すると,SQL文ごとに最適化処理で選択されたSQL最適化モードを確認できます。アクセスパス表示ユティリティについては,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.