X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=sql%2Fpg_hint_plan.sql;h=1034fc9162b03ca3923350db92de2c4a4bb6fe22;hb=ba3f7bc9d89bfec770db5ee98d115c3c080d6087;hp=111fd736c0f68d70114fc46d81e613c1f77f7426;hpb=1844a0af8004d650888a886bcfb3ae797e070360;p=pghintplan%2Fpg_hint_plan.git diff --git a/sql/pg_hint_plan.sql b/sql/pg_hint_plan.sql index 111fd73..1034fc9 100644 --- a/sql/pg_hint_plan.sql +++ b/sql/pg_hint_plan.sql @@ -25,6 +25,8 @@ EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id; EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id; /*+Set(enable_indexscan off)*/ EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id; +EXPLAIN (COSTS false) /*+Set(enable_indexscan off)*/ + SELECT * FROM t1, t2 WHERE t1.id = t2.id; /*+ Set(enable_indexscan off) Set(enable_hashjoin off) */ EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id; @@ -118,21 +120,21 @@ EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) EXPLAIN (COSTS false) SELECT * FROM t1, (VALUES(1,1),(2,2),(3,3)) AS t2(id,val) WHERE t1.id = t2.id; -- single table scan hint test -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(v_1)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(v_2)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(t1)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(v_1)BitmapScan(v_2)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(v_1)BitmapScan(t1)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(v_2)BitmapScan(t1)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); /*+BitmapScan(v_1)BitmapScan(v_2)BitmapScan(t1)*/ -EXPLAIN SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); +EXPLAIN (COSTS false) SELECT (SELECT max(id) FROM t1 v_1 WHERE id < 10), id FROM v1 WHERE v1.id = (SELECT max(id) FROM t1 v_2 WHERE id < 10); -- full scan hint pattern test EXPLAIN (COSTS false) SELECT * FROM t1 WHERE id < 10 AND ctid = '(1,1)'; @@ -511,6 +513,18 @@ SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.i ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = ( SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id ); +/*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(t3_5 t2_5 t1_5)Leading(t3_2 t2_2 t1_2)Leading(t3_4 t2_4 t1_4)Leading(c1_1 t3_3 t2_3 t1_3 t3_1 t2_1 t1_1)*/ +EXPLAIN (COSTS false) +WITH c1_1(id) AS ( +SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id +) +SELECT t1_1.id, ( +SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id +) FROM t1 t1_1, t2 t2_1, t3 t3_1, ( +SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id +) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = ( +SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id +); SET from_collapse_limit TO 1; EXPLAIN (COSTS false) @@ -560,6 +574,18 @@ SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.i ) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = ( SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id ); +/*+HashJoin(t1_1 t3_1)MergeJoin(t1_3 t3_3)NestLoop(t1_2 t2_2)NestLoop(t1_4 t2_4)NestLoop(t1_5 t2_5)Leading(t3_5 t2_5 t1_5)Leading(t3_2 t2_2 t1_2)Leading(t3_4 t2_4 t1_4)Leading(c1_1 t3_3 t2_3 t1_3 t3_1 t2_1 t1_1)*/ +EXPLAIN (COSTS false) +WITH c1_1(id) AS ( +SELECT max(t1_5.id) FROM t1 t1_5, t2 t2_5, t3 t3_5 WHERE t1_5.id = t2_5.id AND t2_5.id = t3_5.id +) +SELECT t1_1.id, ( +SELECT max(t1_2.id) FROM t1 t1_2, t2 t2_2, t3 t3_2 WHERE t1_2.id = t2_2.id AND t2_2.id = t3_2.id +) FROM t1 t1_1, t2 t2_1, t3 t3_1, ( +SELECT t1_3.id FROM t1 t1_3, t2 t2_3, t3 t3_3 WHERE t1_3.id = t2_3.id AND t2_3.id = t3_3.id +) v1_1(id), c1_1 WHERE t1_1.id = t2_1.id AND t2_1.id = t3_1.id AND t2_1.id = v1_1.id AND v1_1.id = c1_1.id AND t1_1.id = ( +SELECT max(t1_4.id) FROM t1 t1_4, t2 t2_4, t3 t3_4 WHERE t1_4.id = t2_4.id AND t2_4.id = t3_4.id +); -- ambigous error EXPLAIN (COSTS false) SELECT * FROM t1, s0.t1, t2 WHERE public.t1.id = s0.t1.id AND public.t1.id = t2.id; @@ -605,3 +631,214 @@ EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1; EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1; /*+IndexScan(t5 no_exist5 no_exist2)*/ EXPLAIN (COSTS false) SELECT * FROM t5 WHERE t5.id = 1; + +-- outer inner +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; + +/*+Leading((t1))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading((t1 t2))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading((t1 t2 t3))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10; +/*+Leading((t1 t2))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; +/*+Leading((((t1 t2) t3) t4))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading((t1 (t2 t3)))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) (t3 t4)))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1); +/*+Leading(((t1 t2) t3)) Leading(((t3 t1) t2))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t1.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1); +/*+Leading(((t1 t2) t3)) Leading((t1_2 t2_2))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1); +/*+Leading(((((t1 t2) t3) t1_2) t2_2))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < ( SELECT t1_2.id FROM t1 t1_2, t2 t2_2 WHERE t1_2.id = t2_2.id AND t2_2.val > 100 ORDER BY t1_2.id LIMIT 1); + +-- Specified outer/inner leading hint and join method hint at the same time +/*+Leading(((t1 t2) t3))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3)) MergeJoin(t1 t2)*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3)) MergeJoin(t1 t2 t3)*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3)) MergeJoin(t1 t3)*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; + +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3)) MergeJoin(t3 t4)*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2) t3)) MergeJoin(t1 t2 t3 t4)*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4 WHERE t1.id = t2.id AND t3.id = t4.id AND t1.val = t3.val AND t1.id < 10; + +/*+ Leading ( ( t1 ( t2 t3 ) ) ) */ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading((t1(t2 t3)))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(("t1(t2" "t3)"))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+ Leading ( ( ( t1 t2 ) t3 ) ) */ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(((t1 t2)t3))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; +/*+Leading(("(t1" "t2)t3"))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3 WHERE t1.id = t2.id AND t2.val = t3.val AND t1.id < 10; + +/*+Leading((t1(t2(t3(t4 t5)))))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading((t5(t4(t3(t2 t1)))))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading(((((t1 t2)t3)t4)t5))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading(((((t5 t4)t3)t2)t1))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading(((t1 t2)(t3(t4 t5))))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading(((t5 t4)(t3(t2 t1))))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading((((t1 t2)t3)(t4 t5)))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; +/*+Leading((((t5 t4)t3)(t2 t1)))*/ +EXPLAIN (COSTS false) SELECT * FROM t1, t2, t3, t4, t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id AND t1.id = t5.id; + +-- inherite table test to specify the index's name +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_pkey)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_id_val_idx)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_val_id_idx)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; + +EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_val)*/ +EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_pkey)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_id2_val)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_val2_id)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; + +/*+IndexScan(p2 p2_pkey)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_c1_id_val_idx)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 no_exist)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_pkey p2_c1_id_val_idx)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_pkey no_exist)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_c1_id_val_idx no_exist)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_pkey p2_c1_id_val_idx no_exist)*/ +EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)'; + +/*+IndexScan(p2 p2_val_idx)*/ +EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_expr)*/ +EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_val_idx6)*/ +EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)'; +/*+IndexScan(p2 p2_val_idx p2_val_idx6)*/ +EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)'; + +-- regular expression +-- ordinary table +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexScanRegexp(t5 t5_[^i].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexScanRegexp(t5 t5_id[0-9].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexScanRegexp(t5 t5[^_].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexScan(t5 t5_id[0-9].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexOnlyScanRegexp(t5 t5_[^i].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexOnlyScanRegexp(t5 t5_id[0-9].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexOnlyScanRegexp(t5 t5[^_].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexOnlyScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ IndexOnlyScan(t5 t5_id[0-9].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ BitmapScanRegexp(t5 t5_[^i].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ BitmapScanRegexp(t5 t5_id[0-9].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ BitmapScanRegexp(t5 t5[^_].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ BitmapScanRegexp(t5 ^.*t5_idaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; +/*+ BitmapScan(t5 t5_id[0-9].*)*/ +EXPLAIN (COSTS false) SELECT id FROM t5 WHERE id = 1; + +-- Inheritance +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexScanRegexp(p1 p1_.*[^0-9]$)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexScanRegexp(p1 p1_.*val2.*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexScanRegexp(p1 p1[^_].*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexScan(p1 p1_.*val2.*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexOnlyScanRegexp(p1 p1_.*[^0-9]$)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexOnlyScanRegexp(p1 p1_.*val2.*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexOnlyScanRegexp(p1 p1[^_].*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ IndexOnlyScan(p1 p1_.*val2.*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ BitmapScanRegexp(p1 p1_.*[^0-9]$)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ BitmapScanRegexp(p1 p1_.*val2.*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ BitmapScanRegexp(p1 p1[^_].*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; +/*+ BitmapScan(p1 p1_.*val2.*)*/ +EXPLAIN (COSTS false) SELECT val FROM p1 WHERE val = 1; + +-- search from hint table +INSERT INTO hint_plan.hints VALUES ('EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = ?;', '', 'SeqScan(t1)'); +SET pg_hint_plan.enable_hint_table = on; +EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = 1; +SET pg_hint_plan.enable_hint_table = off; +EXPLAIN (COSTS false) SELECT * FROM t1 WHERE t1.id = 1; +TRUNCATE hint_plan.hints; +VACUUM ANALYZE hint_plan.hints; + +-- plpgsql test +EXPLAIN (COSTS false) SELECT id FROM t1 WHERE t1.id = 1; +DO LANGUAGE plpgsql $$ +DECLARE + id integer; +BEGIN + SELECT /*+SeqScan(t1)*/ t1.id INTO id FROM t1 WHERE t1.id = 1; + RETURN; +END; +$$; +DROP EXTENSION pg_hint_plan;