Frequently Asked Questions (FAQ) for PostgreSQL
- Last updated: Fri Oct 10 17:27:02 EDT 2003
+ Last updated: Wed Oct 29 15:19:43 EST 2003
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
4.22) Why are my subqueries using IN so slow?
- Currently, we join subqueries to outer queries by sequentially
- scanning the result of the subquery for each row of the outer query.
- If the subquery returns only a few rows and the outer query returns
- many rows, IN is fastest. To speed up other queries, replace IN with
- EXISTS:
+ In versions prior to 7.4, subqueries were joined to outer queries by
+ sequentially scanning the result of the subquery for each row of the
+ outer query. If the subquery returns only a few rows and the outer
+ query returns many rows, IN is fastest. To speed up other queries,
+ replace IN with EXISTS:
SELECT *
FROM tab
WHERE col IN (SELECT subcol FROM subtab);
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
- For this to be fast, subcol should be an indexed column. This
- preformance problem will be fixed in 7.4.
+ For this to be fast, subcol should be an indexed column.
+
+ In version 7.4 and later, IN actually uses the same sophisticated join
+ techniques as normal queries, and is prefered to using EXISTS.
4.23) How do I perform an outer join?
alink="#0000ff">
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
- <P>Last updated: Fri Oct 10 17:27:02 EDT 2003</P>
+ <P>Last updated: Wed Oct 29 15:19:43 EST 2003</P>
<P>Current maintainer: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
<H4><A name="4.22">4.22</A>) Why are my subqueries using
<CODE><SMALL>IN</SMALL></CODE> so slow?</H4>
- <P>Currently, we join subqueries to outer queries by sequentially
- scanning the result of the subquery for each row of the outer
- query. If the subquery returns only a few rows and the outer query
- returns many rows, <CODE><SMALL>IN</SMALL></CODE> is fastest. To
+ <P>In versions prior to 7.4, subqueries were joined to outer queries
+ by sequentially scanning the result of the subquery for each row of
+ the outer query. If the subquery returns only a few rows and the outer
+ query returns many rows, <CODE><SMALL>IN</SMALL></CODE> is fastest. To
speed up other queries, replace <CODE>IN</CODE> with
<CODE>EXISTS</CODE>:</P>
<PRE> SELECT *
</PRE>
For this to be fast, <CODE>subcol</CODE> should be an indexed column.
- This preformance problem will be fixed in 7.4.
+ <P>In version 7.4 and later, <CODE>IN</CODE> actually uses the same
+ sophisticated join techniques as normal queries, and is prefered
+ to using <CODE>EXISTS</CODE>.
<H4><A name="4.23">4.23</A>) How do I perform an outer join?</H4>