OSDN Git Service

Update IN/EXISTS item.
authorBruce Momjian <bruce@momjian.us>
Thu, 10 Oct 2002 03:15:19 +0000 (03:15 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 10 Oct 2002 03:15:19 +0000 (03:15 +0000)
doc/FAQ
doc/src/FAQ/FAQ.html

diff --git a/doc/FAQ b/doc/FAQ
index b7ccc62..e74cf8e 100644 (file)
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,7 +1,7 @@
 
                 Frequently Asked Questions (FAQ) for PostgreSQL
                                        
-   Last updated: Mon Sep 30 23:28:35 EDT 2002
+   Last updated: Wed Oct 9 23:14:53 EDT 2002
    
    Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
    
@@ -998,18 +998,21 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
     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. A
-   workaround is to replace IN with EXISTS:
+   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 col1 IN (SELECT col2 FROM TAB2)
+    WHERE col IN (SELECT subcol FROM subtab)
 
    to:
 SELECT *
     FROM tab
-    WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
+    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
 
-   We hope to fix this limitation in a future release.
+   For this to be fast, subcol should be an indexed column. We hope to
+   fix this limitation in a future release.
    
     4.23) How do I perform an outer join?
     
index cad8337..5458766 100644 (file)
@@ -14,7 +14,7 @@
   alink="#0000ff">
     <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
 
-    <P>Last updated: Mon Sep 30 23:28:35 EDT 2002</P>
+    <P>Last updated: Wed Oct  9 23:14:53 EDT 2002</P>
 
     <P>Current maintainer: Bruce Momjian (<A href=
     "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
@@ -1282,22 +1282,25 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
 
     <P>Currently, we join subqueries to outer queries by sequentially
     scanning the result of the subquery for each row of the outer
-    query. A workaround is to replace <CODE>IN</CODE> with
+    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>
 <CODE>SELECT *
     FROM tab
-    WHERE col1 IN (SELECT col2 FROM TAB2)
+    WHERE col IN (SELECT subcol FROM subtab)
 </CODE>
 </PRE>
     to: 
 <PRE>
 <CODE>SELECT *
     FROM tab
-    WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
+    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
 </CODE>
 </PRE>
 
+    For this to be fast, <CODE>subcol</CODE> should be an indexed column.
     We hope to fix this limitation in a future release. 
 
     <H4><A name="4.23">4.23</A>) How do I perform an outer join?</H4>