• R/O
  • HTTP
  • SSH
  • HTTPS

pg_hint_plan: Commit

firtst release


Commit MetaInfo

Revisionebf742219445353ede207ec7dded37e4fc88b9be (tree)
Time2014-12-18 16:37:02
AuthorKyotaro Horiguchi <horiguchi.kyotaro@lab....>
CommiterKyotaro Horiguchi

Log Message

Revert "Add new join method hint "NestLoop_NM" which means force nested loop"

This reverts commit fd8affb6b71d00243c126e566d4ac7e34b13e8f3.

Change Summary

Incremental Difference

--- a/doc/hint_list-ja.html
+++ b/doc/hint_list-ja.html
@@ -54,11 +54,9 @@ PostgreSQL 9.2以降で動作します。</td></tr>
5454 <tr><td nowrap>NoBitmapScan(テーブル)</td>
5555 <td>指定したテーブルについて、Bitmap Scan以外でコストが最小となるスキャン方式を選択します。</td></tr>
5656
57-<tr><td rowspan="7" nowrap>結合方式</td>
57+<tr><td rowspan="6" nowrap>結合方式</td>
5858 <td nowrap>NestLoop(テーブル テーブル[ テーブル...])</td>
5959 <td>指定したテーブル間の結合にNested Loopを選択します。</td></tr>
60- <td nowrap>NestLoop_NM(テーブル テーブル[ テーブル...])</td>
61- <td>指定したテーブル間の結合にNested Loopを選択しますがマテリアライズを禁止します。</td></tr>
6260 <tr><td nowrap>HashJoin(テーブル テーブル[ テーブル...])</td>
6361 <td>指定したテーブル間の結合にHash Joinを選択します。</td></tr>
6462 <tr><td nowrap>MergeJoin(テーブル テーブル[ テーブル...])</td>
--- a/doc/pg_hint_plan-ja.html
+++ b/doc/pg_hint_plan-ja.html
@@ -256,12 +256,6 @@ postgres-# ORDER BY a.aid;
256256 <p>あるオブジェクトの組み合わせでどのような順番で結合するかを指定できるヒント句のグループです。「Leading」のみを含みます。</p>
257257 <p>結合順序を指定できるオブジェクトは結合方式と同じです。</p>
258258 <p>先に結合して欲しいオブジェクトから順にオブジェクト名または別名を指定します。同じ問合せブロックのオブジェクトに対して複数の結合順序のヒント句を指定した場合は、最後に指定したヒント句が適用されます。 </p>
259-<p>2つのオブジェクトの組を丸括弧で囲うと結合の内外を指定することができます。この指定はネストさせることができます。
260-<pre>
261-Leading((t5 (t1 t2)))
262-</pre>
263-は、t1とt2の結合をt1をアウタとして結合し、さらにそれとt5をt5をアウタとして結合します。
264-</p>
265259 <div class="tips">
266260 <span class="strong"></span>
267261 <p>結合対象のテーブルが3つ以上ある場合、結合方式のヒント句を指定したとしてもコスト見積もりによっては対象のテーブルが直接結合されないことがあります。対象のテーブルが直接結合されない場合は、結合順序のヒント句を併せて指定します。</p>
--- a/pg_hint_plan.c
+++ b/pg_hint_plan.c
@@ -81,7 +81,6 @@ PG_MODULE_MAGIC;
8181 #define HINT_INDEXONLYSCANREGEXP "IndexOnlyScanRegexp"
8282 #define HINT_NOINDEXONLYSCAN "NoIndexOnlyScan"
8383 #define HINT_NESTLOOP "NestLoop"
84-#define HINT_NESTLOOP_NM "NestLoop_NM"
8584 #define HINT_MERGEJOIN "MergeJoin"
8685 #define HINT_HASHJOIN "HashJoin"
8786 #define HINT_NONESTLOOP "NoNestLoop"
@@ -115,15 +114,13 @@ enum
115114 {
116115 ENABLE_NESTLOOP = 0x01,
117116 ENABLE_MERGEJOIN = 0x02,
118- ENABLE_HASHJOIN = 0x04,
119- ENABLE_MATERIALIZE = 0x08
117+ ENABLE_HASHJOIN = 0x04
120118 } JOIN_TYPE_BITS;
121119
122120 #define ENABLE_ALL_SCAN (ENABLE_SEQSCAN | ENABLE_INDEXSCAN | \
123121 ENABLE_BITMAPSCAN | ENABLE_TIDSCAN | \
124122 ENABLE_INDEXONLYSCAN)
125-#define ENABLE_ALL_JOIN (ENABLE_NESTLOOP | ENABLE_MERGEJOIN | ENABLE_HASHJOIN |\
126- ENABLE_MATERIALIZE)
123+#define ENABLE_ALL_JOIN (ENABLE_NESTLOOP | ENABLE_MERGEJOIN | ENABLE_HASHJOIN)
127124 #define DISABLE_ALL_SCAN 0
128125 #define DISABLE_ALL_JOIN 0
129126
@@ -144,7 +141,6 @@ typedef enum HintKeyword
144141 HINT_KEYWORD_INDEXONLYSCANREGEXP,
145142 HINT_KEYWORD_NOINDEXONLYSCAN,
146143 HINT_KEYWORD_NESTLOOP,
147- HINT_KEYWORD_NESTLOOP_NM,
148144 HINT_KEYWORD_MERGEJOIN,
149145 HINT_KEYWORD_HASHJOIN,
150146 HINT_KEYWORD_NONESTLOOP,
@@ -246,7 +242,6 @@ typedef struct JoinMethodHint
246242 unsigned char enforce_mask;
247243 Relids joinrelids;
248244 Relids inner_joinrelids;
249- bool inhibit_materialize;
250245 } JoinMethodHint;
251246
252247 /* join order hints */
@@ -496,7 +491,6 @@ static const HintParser parsers[] = {
496491 HINT_KEYWORD_INDEXONLYSCANREGEXP},
497492 {HINT_NOINDEXONLYSCAN, ScanMethodHintCreate, HINT_KEYWORD_NOINDEXONLYSCAN},
498493 {HINT_NESTLOOP, JoinMethodHintCreate, HINT_KEYWORD_NESTLOOP},
499- {HINT_NESTLOOP_NM, JoinMethodHintCreate, HINT_KEYWORD_NESTLOOP_NM},
500494 {HINT_MERGEJOIN, JoinMethodHintCreate, HINT_KEYWORD_MERGEJOIN},
501495 {HINT_HASHJOIN, JoinMethodHintCreate, HINT_KEYWORD_HASHJOIN},
502496 {HINT_NONESTLOOP, JoinMethodHintCreate, HINT_KEYWORD_NONESTLOOP},
@@ -677,7 +671,6 @@ JoinMethodHintCreate(const char *hint_str, const char *keyword,
677671 hint->enforce_mask = 0;
678672 hint->joinrelids = NULL;
679673 hint->inner_joinrelids = NULL;
680- hint->inhibit_materialize = false;
681674
682675 return (Hint *) hint;
683676 }
@@ -1896,11 +1889,8 @@ JoinMethodHintParse(JoinMethodHint *hint, HintState *hstate, Query *parse,
18961889
18971890 switch (hint_keyword)
18981891 {
1899- case HINT_KEYWORD_NESTLOOP_NM:
1900- hint->enforce_mask = ENABLE_NESTLOOP;
1901- break;
19021892 case HINT_KEYWORD_NESTLOOP:
1903- hint->enforce_mask |= (ENABLE_NESTLOOP | ENABLE_MATERIALIZE);
1893+ hint->enforce_mask = ENABLE_NESTLOOP;
19041894 break;
19051895 case HINT_KEYWORD_MERGEJOIN:
19061896 hint->enforce_mask = ENABLE_MERGEJOIN;
@@ -1909,13 +1899,13 @@ JoinMethodHintParse(JoinMethodHint *hint, HintState *hstate, Query *parse,
19091899 hint->enforce_mask = ENABLE_HASHJOIN;
19101900 break;
19111901 case HINT_KEYWORD_NONESTLOOP:
1912- hint->enforce_mask = (ENABLE_ALL_JOIN ^ ENABLE_NESTLOOP);
1902+ hint->enforce_mask = ENABLE_ALL_JOIN ^ ENABLE_NESTLOOP;
19131903 break;
19141904 case HINT_KEYWORD_NOMERGEJOIN:
1915- hint->enforce_mask = (ENABLE_ALL_JOIN ^ ENABLE_MERGEJOIN);
1905+ hint->enforce_mask = ENABLE_ALL_JOIN ^ ENABLE_MERGEJOIN;
19161906 break;
19171907 case HINT_KEYWORD_NOHASHJOIN:
1918- hint->enforce_mask = (ENABLE_ALL_JOIN ^ ENABLE_HASHJOIN);
1908+ hint->enforce_mask = ENABLE_ALL_JOIN ^ ENABLE_HASHJOIN;
19191909 break;
19201910 default:
19211911 hint_ereport(str, ("Unrecognized hint keyword \"%s\".", keyword));
@@ -2233,7 +2223,6 @@ set_join_config_options(unsigned char enforce_mask, GucContext context)
22332223 SET_CONFIG_OPTION("enable_nestloop", ENABLE_NESTLOOP);
22342224 SET_CONFIG_OPTION("enable_mergejoin", ENABLE_MERGEJOIN);
22352225 SET_CONFIG_OPTION("enable_hashjoin", ENABLE_HASHJOIN);
2236- SET_CONFIG_OPTION("enable_material", ENABLE_MATERIALIZE);
22372226 }
22382227
22392228 /*
@@ -2491,8 +2480,6 @@ pg_hint_plan_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
24912480 current_hint->init_join_mask |= ENABLE_MERGEJOIN;
24922481 if (enable_hashjoin)
24932482 current_hint->init_join_mask |= ENABLE_HASHJOIN;
2494- if (enable_material)
2495- current_hint->init_join_mask |= ENABLE_MATERIALIZE;
24962483
24972484 /*
24982485 * Use PG_TRY mechanism to recover GUC parameters and current_hint to the
Show on old repository browser