Tweak labeling of plan qual conditions for more consistency.

This commit is contained in:
Tom Lane 2002-03-24 17:11:37 +00:00
parent 7100cbc1c4
commit ea10ec1b69
3 changed files with 20 additions and 20 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/perform.sgml,v 1.19 2002/03/24 04:31:05 tgl Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/perform.sgml,v 1.20 2002/03/24 17:11:37 tgl Exp $
--> -->
<chapter id="performance-tips"> <chapter id="performance-tips">
@ -116,7 +116,7 @@ SELECT * FROM pg_class WHERE relname = 'tenk1';
</para> </para>
<para> <para>
Now let's modify the query to add a qualification clause: Now let's modify the query to add a WHERE condition:
<programlisting> <programlisting>
regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 1000; regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 1000;
@ -142,14 +142,14 @@ regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 1000;
</para> </para>
<para> <para>
Modify the query to restrict the qualification even more: Modify the query to restrict the condition even more:
<programlisting> <programlisting>
regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 50; regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 50;
QUERY PLAN QUERY PLAN
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Index Scan using tenk1_unique1 on tenk1 (cost=0.00..179.33 rows=49 width=148) Index Scan using tenk1_unique1 on tenk1 (cost=0.00..179.33 rows=49 width=148)
Index Filter: (unique1 &lt; 50) Index Cond: (unique1 &lt; 50)
</programlisting> </programlisting>
and you will see that if we make the WHERE condition selective and you will see that if we make the WHERE condition selective
@ -161,7 +161,7 @@ regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 50;
</para> </para>
<para> <para>
Add another condition to the qualification: Add another clause to the WHERE condition:
<programlisting> <programlisting>
regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 50 AND regression=# EXPLAIN SELECT * FROM tenk1 WHERE unique1 &lt; 50 AND
@ -169,7 +169,7 @@ regression-# stringu1 = 'xxx';
QUERY PLAN QUERY PLAN
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Index Scan using tenk1_unique1 on tenk1 (cost=0.00..179.45 rows=1 width=148) Index Scan using tenk1_unique1 on tenk1 (cost=0.00..179.45 rows=1 width=148)
Index Filter: (unique1 &lt; 50) Index Cond: (unique1 &lt; 50)
Filter: (stringu1 = 'xxx'::name) Filter: (stringu1 = 'xxx'::name)
</programlisting> </programlisting>
@ -193,10 +193,10 @@ regression-# AND t1.unique2 = t2.unique2;
Nested Loop (cost=0.00..327.02 rows=49 width=296) Nested Loop (cost=0.00..327.02 rows=49 width=296)
-&gt; Index Scan using tenk1_unique1 on tenk1 t1 -&gt; Index Scan using tenk1_unique1 on tenk1 t1
(cost=0.00..179.33 rows=49 width=148) (cost=0.00..179.33 rows=49 width=148)
Index Filter: (unique1 &lt; 50) Index Cond: (unique1 &lt; 50)
-&gt; Index Scan using tenk2_unique2 on tenk2 t2 -&gt; Index Scan using tenk2_unique2 on tenk2 t2
(cost=0.00..3.01 rows=1 width=148) (cost=0.00..3.01 rows=1 width=148)
Index Filter: ("outer".unique2 = t2.unique2) Index Cond: ("outer".unique2 = t2.unique2)
</programlisting> </programlisting>
</para> </para>
@ -208,7 +208,7 @@ regression-# AND t1.unique2 = t2.unique2;
affect row count of the outer scan. For the inner scan, the unique2 value of the affect row count of the outer scan. For the inner scan, the unique2 value of the
current current
outer-scan tuple is plugged into the inner index scan outer-scan tuple is plugged into the inner index scan
to produce an index qualification like to produce an index condition like
<literal>t2.unique2 = <replaceable>constant</replaceable></literal>. So we get the <literal>t2.unique2 = <replaceable>constant</replaceable></literal>. So we get the
same inner-scan plan and costs that we'd get from, say, <literal>explain select same inner-scan plan and costs that we'd get from, say, <literal>explain select
* from tenk2 where unique2 = 42</literal>. The costs of the loop node are then set * from tenk2 where unique2 = 42</literal>. The costs of the loop node are then set
@ -246,7 +246,7 @@ regression-# AND t1.unique2 = t2.unique2;
-&gt; Hash (cost=179.33..179.33 rows=49 width=148) -&gt; Hash (cost=179.33..179.33 rows=49 width=148)
-&gt; Index Scan using tenk1_unique1 on tenk1 t1 -&gt; Index Scan using tenk1_unique1 on tenk1 t1
(cost=0.00..179.33 rows=49 width=148) (cost=0.00..179.33 rows=49 width=148)
Index Filter: (unique1 &lt; 50) Index Cond: (unique1 &lt; 50)
</programlisting> </programlisting>
This plan proposes to extract the 50 interesting rows of <classname>tenk1</classname> This plan proposes to extract the 50 interesting rows of <classname>tenk1</classname>
@ -279,11 +279,11 @@ regression-# WHERE t1.unique1 &lt; 50 AND t1.unique2 = t2.unique2;
-&gt; Index Scan using tenk1_unique1 on tenk1 t1 -&gt; Index Scan using tenk1_unique1 on tenk1 t1
(cost=0.00..179.33 rows=49 width=148) (cost=0.00..179.33 rows=49 width=148)
(actual time=0.63..8.91 rows=50 loops=1) (actual time=0.63..8.91 rows=50 loops=1)
Index Filter: (unique1 &lt; 50) Index Cond: (unique1 &lt; 50)
-&gt; Index Scan using tenk2_unique2 on tenk2 t2 -&gt; Index Scan using tenk2_unique2 on tenk2 t2
(cost=0.00..3.01 rows=1 width=148) (cost=0.00..3.01 rows=1 width=148)
(actual time=0.29..0.32 rows=1 loops=50) (actual time=0.29..0.32 rows=1 loops=50)
Index Filter: ("outer".unique2 = t2.unique2) Index Cond: ("outer".unique2 = t2.unique2)
Total runtime: 31.60 msec Total runtime: 31.60 msec
</screen> </screen>

View File

@ -1,5 +1,5 @@
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/explain.sgml,v 1.18 2002/03/24 16:57:29 tgl Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/ref/explain.sgml,v 1.19 2002/03/24 17:11:37 tgl Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
@ -209,7 +209,7 @@ EXPLAIN SELECT * FROM foo WHERE i = 4;
QUERY PLAN QUERY PLAN
-------------------------------------------------------------- --------------------------------------------------------------
Index Scan using fi on foo (cost=0.00..5.98 rows=1 width=4) Index Scan using fi on foo (cost=0.00..5.98 rows=1 width=4)
Index Filter: (i = 4) Index Cond: (i = 4)
(2 rows) (2 rows)
</computeroutput> </computeroutput>
</programlisting> </programlisting>
@ -226,7 +226,7 @@ EXPLAIN SELECT sum(i) FROM foo WHERE i &lt; 10;
--------------------------------------------------------------------- ---------------------------------------------------------------------
Aggregate (cost=23.93..23.93 rows=1 width=4) Aggregate (cost=23.93..23.93 rows=1 width=4)
-&gt; Index Scan using fi on foo (cost=0.00..23.92 rows=6 width=4) -&gt; Index Scan using fi on foo (cost=0.00..23.92 rows=6 width=4)
Index Filter: (i &lt; 10) Index Cond: (i &lt; 10)
(3 rows) (3 rows)
</computeroutput> </computeroutput>
</programlisting> </programlisting>

View File

@ -5,7 +5,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994-5, Regents of the University of California * Portions Copyright (c) 1994-5, Regents of the University of California
* *
* $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.74 2002/03/24 04:31:07 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.75 2002/03/24 17:11:36 tgl Exp $
* *
*/ */
@ -389,7 +389,7 @@ explain_outNode(StringInfo str, Plan *plan, Plan *outer_plan,
{ {
case T_IndexScan: case T_IndexScan:
show_scan_qual(((IndexScan *) plan)->indxqualorig, true, show_scan_qual(((IndexScan *) plan)->indxqualorig, true,
"Index Filter", "Index Cond",
((Scan *) plan)->scanrelid, ((Scan *) plan)->scanrelid,
outer_plan, outer_plan,
str, indent, es); str, indent, es);
@ -409,7 +409,7 @@ explain_outNode(StringInfo str, Plan *plan, Plan *outer_plan,
break; break;
case T_NestLoop: case T_NestLoop:
show_upper_qual(((NestLoop *) plan)->join.joinqual, show_upper_qual(((NestLoop *) plan)->join.joinqual,
"Join Cond", "Join Filter",
"outer", OUTER, outerPlan(plan), "outer", OUTER, outerPlan(plan),
"inner", INNER, innerPlan(plan), "inner", INNER, innerPlan(plan),
str, indent, es); str, indent, es);
@ -426,7 +426,7 @@ explain_outNode(StringInfo str, Plan *plan, Plan *outer_plan,
"inner", INNER, innerPlan(plan), "inner", INNER, innerPlan(plan),
str, indent, es); str, indent, es);
show_upper_qual(((MergeJoin *) plan)->join.joinqual, show_upper_qual(((MergeJoin *) plan)->join.joinqual,
"Join Cond", "Join Filter",
"outer", OUTER, outerPlan(plan), "outer", OUTER, outerPlan(plan),
"inner", INNER, innerPlan(plan), "inner", INNER, innerPlan(plan),
str, indent, es); str, indent, es);
@ -443,7 +443,7 @@ explain_outNode(StringInfo str, Plan *plan, Plan *outer_plan,
"inner", INNER, innerPlan(plan), "inner", INNER, innerPlan(plan),
str, indent, es); str, indent, es);
show_upper_qual(((HashJoin *) plan)->join.joinqual, show_upper_qual(((HashJoin *) plan)->join.joinqual,
"Join Cond", "Join Filter",
"outer", OUTER, outerPlan(plan), "outer", OUTER, outerPlan(plan),
"inner", INNER, innerPlan(plan), "inner", INNER, innerPlan(plan),
str, indent, es); str, indent, es);