Scalable Database Server, HiRDB Version 8 UAP Development Guide
Table 4-3 describes the features of the SQL optimizing modes.
Table 4-3 Features of the SQL optimizing modes
SQL optimizing mode | Explanation | Advantages | Disadvantages | Selection method |
---|---|---|---|---|
Optimizing mode 1 based on cost | This is the optimization processing method based on cost for HiRDB versions before Version 06-00. This mode can also be used in HiRDB Version 06-00 and later versions. | Even if HiRDB is upgraded from a version earlier than Version 06-00, searches can be performed with the same access paths used in the earlier version. Access paths are sometimes changed for high-speed retrieval. |
The optimal access path cannot always be selected because there are only a few access path candidates. (Access paths are not selected by setting facilities such as hash join as candidates.) | Do not specify the SQL extension optimizing option, or clear the specification for application of optimizing mode 2 based on cost in the SQL extension optimizing option. Some SQL statements always use optimizing mode 2 based on cost. For details, see (2) as follows. |
Optimizing mode 2 based on cost | This is the optimization processing method based on cost that is used in HiRDB Version 06-00 and later. This mode is designed for fast retrieval. | High-speed retrieval is possible because this mode selects access paths from candidates that combine hashing to join search and subquery processing. | Optimization processing takes time because this mode performs complex optimization processing. | Specify application of optimizing mode 2 based on cost in the SQL extension optimizing option. |
Even if optimizing mode 1 based on cost is being used, optimizing mode 2 based on cost is sometimes forcibly applied. The SQL statements that forcibly apply optimizing mode 2 based on cost are as follows:
The application condition and an example of each SQL sentence are shown as follows.
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
UPDATE T1 SET C1=C1||?
UPDATE T1 SET C1=C2
SELECT T1.C1,FT2.C2 FROM T1 LEFT OUTER JOIN FT2 ON T1.C1=FT2.C1
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
SELECT C1,C3||C4 FROM T1 ORDER BY 2
SELECT PCODE,SQUANTITY FROM STOCK WHERE SQUANTITY>20 ORDER BY 2,1 LIMIT 10
SELECT C1 FROM T1
WITH Q1(QC1,QC2) AS (SELECT C1,C2 FROM V1 GROUP BY C1,C2) SELECT AVG(QC1),QC2 FROM Q1 GROUP BY QC2
SELECT * FROM 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
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
UPDATE T1 SET C1=?
INSERT INTO T1(C1,C2) VALUES(?,?)
SELECT C1,COUNT(*) FROM T1 GROUP BY C1
SELECT MIN(C1) FROM T1
WITH W1(C1,C2) AS (SELECT DISTINCT C1,C2 FROM T1) SELECT C2,COUNT(*) FROM W1 GROUP BY C2
UPDATE T1 SET C1=NULL WHERE C1=(SELECT MIN(C1) FROM T1)
DELETE FROM T1 WHERE C1=(SELECT MIN(C1) FROM T1)
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
SELECT PCODE, SQUANTITY FROM STOCK WHERE SQUANTITY > 20 ORDER BY 2, 1 LIMIT 20, 10
SELECT AVG(QC1),QC2 FROM(SELECT C1,C2 FROM V1 GROUP BY C1,C2) AS Q1(QC1,QC2)
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 Note
SELECT C1 FROM T1 WHERE C2 SIMILAR TO '%(b|g)%' Note
Table 4-4 shows the SQL optimizing modes in which the SQL optimization option and SQL extension optimizing option are valid.
Table 4-4 SQL optimizing modes in which the SQL optimization option and SQL extension optimizing option are valid
SQL optimizing mode | SQL optimization option | SQL extension optimizing option |
---|---|---|
Optimizing mode 1 based on cost | V | |
Optimizing mode 2 based on cost | V | V |
To check the SQL optimizing mode that was selected by the optimization process for each SQL statement, use the access path display utility. For details about the access path display utility, see the HiRDB Version 8 Command Reference manual.
All Rights Reserved. Copyright (C) 2007, Hitachi, Ltd.