OSDN Git Service

IndexOnlyScanヒント用のテストを実装した。
authorTakashi Suzuki <suzuki.takashi@metrosystems.co.jp>
Mon, 19 Nov 2012 06:45:42 +0000 (15:45 +0900)
committerTakashi Suzuki <suzuki.takashi@metrosystems.co.jp>
Mon, 19 Nov 2012 06:45:42 +0000 (15:45 +0900)
expected/indexonly-9.1.out
expected/indexonly-9.2.out
sql/indexonly.sql

index a11e056..f69507a 100644 (file)
 LOAD 'pg_hint_plan';
+SET pg_hint_plan.enable TO on;
 SET pg_hint_plan.debug_print TO on;
 SET client_min_messages TO LOG;
---
--- IndexOnlyScan hint test
---
--- 1.ヒントつきクエリとの比較用
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-      QUERY PLAN       
------------------------
- Seq Scan on ti1 t_1
-   Filter: (c2 < 1000)
-(2 rows)
-
--- 2.テーブルを指定、1と比較
-/*+IndexOnlyScan(ti1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(ti1)"
+SET search_path TO public;
+----
+---- No. S-3-1 scan method hint
+----
+-- No. S-3-1-17
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
+          QUERY PLAN          
+------------------------------
+ Index Scan using t1_i1 on t1
+   Index Cond: (c1 = 1)
+(2 rows)
+
+/*+IndexOnlyScan(t1)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(t1)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+          QUERY PLAN          
+------------------------------
+ Index Scan using t1_i1 on t1
+   Index Cond: (c1 = 1)
+(2 rows)
+
+-- No. S-3-1-18
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on t1
+   Filter: (c1 >= 1)
+(2 rows)
+
+/*+IndexOnlyScan(t1)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(t1)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on t1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-1-19
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
+          QUERY PLAN          
+------------------------------
+ Index Scan using t1_i1 on t1
+   Index Cond: (c1 = 1)
+(2 rows)
+
+/*+NoIndexOnlyScan(t1)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 = 1;
+INFO:  hint syntax error at or near "NoIndexOnlyScan(t1)"
+DETAIL:  Unrecognized hint keyword "NoIndexOnlyScan".
+          QUERY PLAN          
+------------------------------
+ Index Scan using t1_i1 on t1
+   Index Cond: (c1 = 1)
+(2 rows)
+
+-- No. S-3-1-20
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on t1
+   Filter: (c1 >= 1)
+(2 rows)
+
+/*+NoIndexOnlyScan(t1)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.t1 WHERE t1.c1 >= 1;
+INFO:  hint syntax error at or near "NoIndexOnlyScan(t1)"
+DETAIL:  Unrecognized hint keyword "NoIndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on t1
+   Filter: (c1 >= 1)
+(2 rows)
+
+----
+---- No. S-3-3 index name specified
+----
+EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE ti1.c2 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c2 >= 1)
+(2 rows)
+
+-- No. S-3-3-7
+/*+IndexOnlyScan(ti1 ti1_i3)*/
+EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE ti1.c2 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_i3)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
+     QUERY PLAN      
+---------------------
  Seq Scan on ti1
-   Filter: (c2 < 1000)
+   Filter: (c2 >= 1)
 (2 rows)
 
--- 3.エイリアスを指定、1と比較
-/*+IndexOnlyScan(t_1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(t_1)"
+-- No. S-3-3-8
+/*+IndexOnlyScan(ti1 ti1_i3 ti1_i2)*/
+EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE ti1.c2 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_i3 ti1_i2)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
- Seq Scan on ti1 t_1
-   Filter: (c2 < 1000)
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c2 >= 1)
 (2 rows)
 
--- 4.インデックスを指定、1と比較
-/*+IndexOnlyScan(ti1_i2)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(ti1_i2)"
+-- No. S-3-3-9
+/*+IndexOnlyScan(ti1 ti1_i4 ti1_i3 ti1_i2 ti1_i1)*/
+EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE ti1.c2 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_i4 ti1_i3 ti1_i2 ti1_i1)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
+     QUERY PLAN      
+---------------------
  Seq Scan on ti1
-   Filter: (c2 < 1000)
+   Filter: (c2 >= 1)
 (2 rows)
 
--- 5.エイリアスとインデックスを指定・指定したインデックスを使用、2と比較
-/*+IndexOnlyScan(t_1 ti1_i2)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(t_1 ti1_i2)"
+----
+---- No. S-3-4 index type
+----
+-- No. S-3-4-23
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_btree)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_btree)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
- Seq Scan on ti1 t_1
-   Filter: (c2 < 1000)
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
 (2 rows)
 
--- 6.エイリアス1つとインデックス2つを指定、2つ目のインデックスを使用、5と比較
-/*+IndexOnlyScan(t_1 ti1_i2 ti1_i1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(t_1 ti1_i2 ti1_i1)"
+-- No. S-3-4-24
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_hash)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_hash)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
Seq Scan on ti1 t_1
-   Filter: (c2 < 1000)
+            QUERY PLAN            
+----------------------------------
Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
--- 7.Index ScanとIndex Only Scanの両方で使用しないようなインデックスを指定、
---   5と比較
-/*+IndexOnlyScan(t_1 ti1_pred)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(t_1 ti1_pred)"
+-- No. S-3-4-25
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 1;
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 < 1)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_gist)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_gist)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
- Seq Scan on ti1 t_1
-   Filter: (c2 < 1000)
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 < 1)
+(2 rows)
+
+-- No. S-3-4-26
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
--- 8.存在しないインデックスを指定
-/*+IndexOnlyScan(t_1 ti1_i)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-INFO:  hint syntax error at or near "IndexOnlyScan(t_1 ti1_i)"
+/*+IndexOnlyScan(ti1 ti1_gin)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_gin)"
 DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
-      QUERY PLAN       
------------------------
Seq Scan on ti1 t_1
-   Filter: (c2 < 1000)
+            QUERY PLAN            
+----------------------------------
Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
---
--- IndexScan hint test
---
--- 1.IndexScanヒントが今までどおり使えることの確認
-/*+IndexScan(t_1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 1000;
-LOG:  pg_hint_plan:
-used hint:
-IndexScan(t_1)
-not used hint:
-duplication hint:
-error hint:
+-- No. S-3-4-27
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 100;
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 < 100)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_expr)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 100;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_expr)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 < 100)
+(2 rows)
 
+-- No. S-3-4-28
+EXPLAIN (COSTS false) SELECT c4 FROM s1.ti1 WHERE lower(c4) >= '1';
              QUERY PLAN             
 ------------------------------------
Index Scan using ti1_i1 on ti1 t_1
-   Index Cond: (c2 < 1000)
Seq Scan on ti1
+   Filter: (lower(c4) >= '1'::text)
 (2 rows)
 
---
--- NoIndexOnlyScan hint test
---
--- 1.ヒントつきクエリとの比較用
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 10;
+/*+IndexOnlyScan(ti1 ti1_pred)*/
+EXPLAIN (COSTS false) SELECT c4 FROM s1.ti1 WHERE lower(c4) >= '1';
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_pred)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
              QUERY PLAN             
 ------------------------------------
- Index Scan using ti1_i1 on ti1 t_1
-   Index Cond: (c2 < 10)
+ Seq Scan on ti1
+   Filter: (lower(c4) >= '1'::text)
+(2 rows)
+
+-- No. S-3-4-29
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
 (2 rows)
 
--- 2.テーブルを指定、1と比較
+/*+IndexOnlyScan(ti1 ti1_uniq)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_uniq)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-4-30
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_multi)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_multi)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-4-31
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE to_tsvector('english', c4) @@ 'a & b';
+                                       QUERY PLAN                                        
+-----------------------------------------------------------------------------------------
+ Bitmap Heap Scan on ti1
+   Recheck Cond: (to_tsvector('english'::regconfig, c4) @@ '''a'' & ''b'''::tsquery)
+   ->  Bitmap Index Scan on ti1_ts
+         Index Cond: (to_tsvector('english'::regconfig, c4) @@ '''a'' & ''b'''::tsquery)
+(4 rows)
+
+/*+IndexOnlyScan(ti1 ti1_ts)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE to_tsvector('english', c4) @@ 'a & b';
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_ts)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+                                       QUERY PLAN                                        
+-----------------------------------------------------------------------------------------
+ Bitmap Heap Scan on ti1
+   Recheck Cond: (to_tsvector('english'::regconfig, c4) @@ '''a'' & ''b'''::tsquery)
+   ->  Bitmap Index Scan on ti1_ts
+         Index Cond: (to_tsvector('english'::regconfig, c4) @@ '''a'' & ''b'''::tsquery)
+(4 rows)
+
+-- No. S-3-4-32
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_pkey)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_pkey)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-4-33
+EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE c2 >= 1;
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c2 >= 1)
+(2 rows)
+
+/*+IndexOnlyScan(ti1 ti1_c2_key)*/
+EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE c2 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_c2_key)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c2 >= 1)
+(2 rows)
+
+----
+---- No. S-3-5 not used index
+----
+-- No. S-3-5-3
+/*+IndexOnlyScan(ti1 ti1_pred)*/
+EXPLAIN (COSTS true) SELECT c1 FROM s1.ti1 WHERE c1 = 100;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_pred)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+                             QUERY PLAN                             
+--------------------------------------------------------------------
+ Index Scan using ti1_uniq on ti1  (cost=0.00..8.27 rows=1 width=4)
+   Index Cond: (c1 = 100)
+(2 rows)
+
+----
+---- No. S-3-6 not exist index
+----
+-- No. S-3-6-3
+/*+IndexOnlyScan(ti1 not_exist)*/
+EXPLAIN (COSTS true) SELECT c1 FROM s1.ti1 WHERE c1 = 100;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 not_exist)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+                             QUERY PLAN                             
+--------------------------------------------------------------------
+ Index Scan using ti1_uniq on ti1  (cost=0.00..8.27 rows=1 width=4)
+   Index Cond: (c1 = 100)
+(2 rows)
+
+----
+---- No. S-3-13 message output
+----
+-- No. S-3-13-25
+/*+IndexOnlyScan(ti1)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-13-26
+/*+IndexOnlyScan(ti1 ti1_pkey)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_pkey)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-13-27
+/*+IndexOnlyScan(ti1 ti1_pkey ti1_btree)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+INFO:  hint syntax error at or near "IndexOnlyScan(ti1 ti1_pkey ti1_btree)"
+DETAIL:  Unrecognized hint keyword "IndexOnlyScan".
+     QUERY PLAN      
+---------------------
+ Seq Scan on ti1
+   Filter: (c1 >= 1)
+(2 rows)
+
+-- No. S-3-13-28
 /*+NoIndexOnlyScan(ti1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE c2 < 10;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 INFO:  hint syntax error at or near "NoIndexOnlyScan(ti1)"
 DETAIL:  Unrecognized hint keyword "NoIndexOnlyScan".
-           QUERY PLAN           
---------------------------------
- Index Scan using ti1_i1 on ti1
-   Index Cond: (c2 < 10)
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
--- 3.エイリアスを指定、1と比較
-/*+NoIndexOnlyScan(t_1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 10;
-INFO:  hint syntax error at or near "NoIndexOnlyScan(t_1)"
+-- No. S-3-13-29
+/*+NoIndexOnlyScan(ti1 ti1_pkey)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+INFO:  hint syntax error at or near "NoIndexOnlyScan(ti1 ti1_pkey)"
 DETAIL:  Unrecognized hint keyword "NoIndexOnlyScan".
-             QUERY PLAN             
-------------------------------------
- Index Scan using ti1_i1 on ti1 t_1
-   Index Cond: (c2 < 10)
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
--- 4.インデックスを指定、1と比較
-/*+NoIndexOnlyScan(ti1_i2)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 WHERE c2 < 10;
-INFO:  hint syntax error at or near "NoIndexOnlyScan(ti1_i2)"
+-- No. S-3-13-30
+/*+NoIndexOnlyScan(ti1 ti1_pkey ti1_btree)*/
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+INFO:  hint syntax error at or near "NoIndexOnlyScan(ti1 ti1_pkey ti1_btree)"
 DETAIL:  Unrecognized hint keyword "NoIndexOnlyScan".
-           QUERY PLAN           
---------------------------------
- Index Scan using ti1_i1 on ti1
-   Index Cond: (c2 < 10)
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
--- 5.エイリアスとインデックスを指定、2と比較
-/*+NoIndexOnlyScan(t_1 ti1_i1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 10;
-INFO:  hint syntax error at or near "NoIndexOnlyScan(t_1 ti1_i1)"
-DETAIL:  Unrecognized hint keyword "NoIndexOnlyScan".
-             QUERY PLAN             
-------------------------------------
- Index Scan using ti1_i1 on ti1 t_1
-   Index Cond: (c2 < 10)
-(2 rows)
-
---
--- NoIndexScan hint test
---
--- 1.Index ScanだけでなIndex Only Scanも選択されないことの確認
-/*+NoIndexScan(t_1)*/
-EXPLAIN (COSTS false) SELECT c2 FROM s1.ti1 t_1 WHERE c2 < 10;
-LOG:  pg_hint_plan:
-used hint:
-NoIndexScan(t_1)
-not used hint:
-duplication hint:
-error hint:
-
-            QUERY PLAN             
------------------------------------
- Bitmap Heap Scan on ti1 t_1
-   Recheck Cond: (c2 < 10)
-   ->  Bitmap Index Scan on ti1_i2
-         Index Cond: (c2 < 10)
-(4 rows)
-
index c6e99ec..f4b3d4e 100644 (file)
@@ -183,15 +183,15 @@ error hint:
 (2 rows)
 
 -- No. S-3-4-24
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
-     QUERY PLAN      
----------------------
Seq Scan on ti1
-   Filter: (c1 >= 1)
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+              QUERY PLAN               
+---------------------------------------
Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
 /*+IndexOnlyScan(ti1 ti1_hash)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_hash)
@@ -199,20 +199,22 @@ not used hint:
 duplication hint:
 error hint:
 
-     QUERY PLAN      
----------------------
-
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_hash on ti1
+   Index Cond: (c1 = 1)
+(2 rows)
 
 -- No. S-3-4-25
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
-     QUERY PLAN      
----------------------
Seq Scan on ti1
-   Filter: (c1 >= 1)
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 1;
+              QUERY PLAN               
+---------------------------------------
Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 < 1)
 (2 rows)
 
 /*+IndexOnlyScan(ti1 ti1_gist)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 1;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_gist)
@@ -222,18 +224,20 @@ error hint:
 
             QUERY PLAN            
 ----------------------------------
-
+ Index Scan using ti1_gist on ti1
+   Index Cond: (c1 < 1)
+(2 rows)
 
 -- No. S-3-4-26
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
-     QUERY PLAN      
----------------------
Seq Scan on ti1
-   Filter: (c1 >= 1)
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
+              QUERY PLAN               
+---------------------------------------
Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
 (2 rows)
 
 /*+IndexOnlyScan(ti1 ti1_gin)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_gin)
@@ -241,20 +245,22 @@ not used hint:
 duplication hint:
 error hint:
 
-     QUERY PLAN      
----------------------
-
+     QUERY PLAN     
+--------------------
+ Seq Scan on ti1
+   Filter: (c1 = 1)
+(2 rows)
 
 -- No. S-3-4-27
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
-     QUERY PLAN      
----------------------
Seq Scan on ti1
-   Filter: (c1 >= 1)
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 100;
+              QUERY PLAN               
+---------------------------------------
Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 < 100)
 (2 rows)
 
 /*+IndexOnlyScan(ti1 ti1_expr)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 100;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_expr)
@@ -262,12 +268,15 @@ not used hint:
 duplication hint:
 error hint:
 
-     QUERY PLAN      
----------------------
-
+            QUERY PLAN             
+-----------------------------------
+ Index Scan using ti1_expr on ti1
+   Index Cond: ((c1 < 100) = true)
+   Filter: (c1 < 100)
+(3 rows)
 
 -- No. S-3-4-28
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE lower(c4) >= '1';
+EXPLAIN (COSTS false) SELECT c4 FROM s1.ti1 WHERE lower(c4) >= '1';
              QUERY PLAN             
 ------------------------------------
  Seq Scan on ti1
@@ -275,7 +284,7 @@ EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE lower(c4) >= '1';
 (2 rows)
 
 /*+IndexOnlyScan(ti1 ti1_pred)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE lower(c4) >= '1';
+EXPLAIN (COSTS false) SELECT c4 FROM s1.ti1 WHERE lower(c4) >= '1';
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_pred)
@@ -285,7 +294,9 @@ error hint:
 
                QUERY PLAN               
 ----------------------------------------
-
+ Index Scan using ti1_pred on ti1
+   Index Cond: (lower(c4) >= '1'::text)
+(2 rows)
 
 -- No. S-3-4-29
 EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
@@ -354,7 +365,9 @@ error hint:
 
                                   QUERY PLAN                                   
 -------------------------------------------------------------------------------
-
+ Seq Scan on ti1
+   Filter: (to_tsvector('english'::regconfig, c4) @@ '''a'' & ''b'''::tsquery)
+(2 rows)
 
 -- No. S-3-4-32
 EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
@@ -445,7 +458,7 @@ error hint:
 ----
 -- No. S-3-13-25
 /*+IndexOnlyScan(ti1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1)
@@ -453,13 +466,15 @@ not used hint:
 duplication hint:
 error hint:
 
-            QUERY PLAN            
-----------------------------------
-
+              QUERY PLAN               
+---------------------------------------
+ Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 >= 1)
+(2 rows)
 
 -- No. S-3-13-26
 /*+IndexOnlyScan(ti1 ti1_pkey)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_pkey)
@@ -467,13 +482,15 @@ not used hint:
 duplication hint:
 error hint:
 
-            QUERY PLAN            
-----------------------------------
-
+              QUERY PLAN               
+---------------------------------------
+ Index Only Scan using ti1_pkey on ti1
+   Index Cond: (c1 >= 1)
+(2 rows)
 
 -- No. S-3-13-27
 /*+IndexOnlyScan(ti1 ti1_pkey ti1_btree)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 LOG:  pg_hint_plan:
 used hint:
 IndexOnlyScan(ti1 ti1_pkey ti1_btree)
@@ -481,13 +498,15 @@ not used hint:
 duplication hint:
 error hint:
 
-            QUERY PLAN             
------------------------------------
-
+               QUERY PLAN               
+----------------------------------------
+ Index Only Scan using ti1_btree on ti1
+   Index Cond: (c1 >= 1)
+(2 rows)
 
 -- No. S-3-13-28
 /*+NoIndexOnlyScan(ti1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 LOG:  pg_hint_plan:
 used hint:
 NoIndexOnlyScan(ti1)
@@ -495,34 +514,31 @@ not used hint:
 duplication hint:
 error hint:
 
-            QUERY PLAN             
------------------------------------
- Tid Scan on ti1
-   TID Cond: (ctid = '(1,1)'::tid)
-   Filter: (c1 = 1)
-(3 rows)
+            QUERY PLAN            
+----------------------------------
+ Index Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
+(2 rows)
 
 -- No. S-3-13-29
 /*+NoIndexOnlyScan(ti1 ti1_pkey)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 INFO:  hint syntax error at or near "ti1_pkey)"
 DETAIL:  Closing parenthesis is necessary.
-            QUERY PLAN             
------------------------------------
- Tid Scan on ti1
-   TID Cond: (ctid = '(1,1)'::tid)
-   Filter: (c1 = 1)
-(3 rows)
+              QUERY PLAN               
+---------------------------------------
+ Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
+(2 rows)
 
 -- No. S-3-13-30
 /*+NoIndexOnlyScan(ti1 ti1_pkey ti1_btree)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 INFO:  hint syntax error at or near "ti1_pkey ti1_btree)"
 DETAIL:  Closing parenthesis is necessary.
-            QUERY PLAN             
------------------------------------
- Tid Scan on ti1
-   TID Cond: (ctid = '(1,1)'::tid)
-   Filter: (c1 = 1)
-(3 rows)
+              QUERY PLAN               
+---------------------------------------
+ Index Only Scan using ti1_uniq on ti1
+   Index Cond: (c1 = 1)
+(2 rows)
 
index 642c8fe..4e98238 100644 (file)
@@ -57,29 +57,29 @@ EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 
 -- No. S-3-4-24
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 /*+IndexOnlyScan(ti1 ti1_hash)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 
 -- No. S-3-4-25
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 1;
 /*+IndexOnlyScan(ti1 ti1_gist)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 1;
 
 -- No. S-3-4-26
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 /*+IndexOnlyScan(ti1 ti1_gin)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 
 -- No. S-3-4-27
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 100;
 /*+IndexOnlyScan(ti1 ti1_expr)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 < 100;
 
 -- No. S-3-4-28
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE lower(c4) >= '1';
+EXPLAIN (COSTS false) SELECT c4 FROM s1.ti1 WHERE lower(c4) >= '1';
 /*+IndexOnlyScan(ti1 ti1_pred)*/
-EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE lower(c4) >= '1';
+EXPLAIN (COSTS false) SELECT c4 FROM s1.ti1 WHERE lower(c4) >= '1';
 
 -- No. S-3-4-29
 EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
@@ -128,24 +128,24 @@ EXPLAIN (COSTS true) SELECT c1 FROM s1.ti1 WHERE c1 = 100;
 
 -- No. S-3-13-25
 /*+IndexOnlyScan(ti1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 
 -- No. S-3-13-26
 /*+IndexOnlyScan(ti1 ti1_pkey)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 
 -- No. S-3-13-27
 /*+IndexOnlyScan(ti1 ti1_pkey ti1_btree)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 >= 1;
 
 -- No. S-3-13-28
 /*+NoIndexOnlyScan(ti1)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 
 -- No. S-3-13-29
 /*+NoIndexOnlyScan(ti1 ti1_pkey)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;
 
 -- No. S-3-13-30
 /*+NoIndexOnlyScan(ti1 ti1_pkey ti1_btree)*/
-EXPLAIN (COSTS false) SELECT * FROM s1.ti1 WHERE c1 = 1 AND ctid = '(1,1)';
+EXPLAIN (COSTS false) SELECT c1 FROM s1.ti1 WHERE c1 = 1;