Hello

I've found a strange behavior in query execution:
I have really big table fti_author (>4 000 000 records) and i want to
find ID intersection of ones contain '^clarke' and '^arthur'

I've created 2 methods

1 select all with '^clarke' into temp table
  select intersection of ones with '^arthur' and temp table
(example t1.txt in attachment)
2 one select with set of conditions
(example t2.txt in attachment)

THE PROBLEM is that 1st method requires 0.7sec and the 2nd - 3m20sec.
Please tell me why.


PS

Please find attached to this letter verbose plan for second query.

= selected dump ============================
--
-- TOC Entry ID 3 (OID 26649711)
--
-- Name: fti_author Type: TABLE Owner: gena
--
CREATE TABLE "fti_author" (
        "string" character varying(50),
        "id" oid
);

--
-- TOC Entry ID 7 (OID 26649711)
--
-- Name: "fti_author_s" Type: INDEX Owner: gena
--

CREATE  INDEX "fti_author_s" on "fti_author" using btree ( "string" "varchar_ops" );

--
-- TOC Entry ID 8 (OID 26649711)
--
-- Name: "fti_author_i" Type: INDEX Owner: gena
--

CREATE  INDEX "fti_author_i" on "fti_author" using btree ( "id" "oid_ops" );

====================



I'm using compiled CVS tree dated
 23 Nov 2000.

complied with options
 --enable-syslog --prefix= --exec-prefix=/usr --with-locale --with-perl

compiler
 gcc version pgcc-2.91.66 19990314 (egcs-1.1.2 release)

System
 Mandrake Linux 6.0 (with some updates)
 Celeron 500/128M
 
Gena
psql bookfind3 -c "drop table tt;"
psql bookfind3 -c "select id into tt from fti_author where string ~ '^arthur';"
psql bookfind3 -c "create index tti on tt(id);"
psql bookfind3 -c "select count(tt.id) from tt,fti_author a where tt.id=a.id and 
a.string ~'^clarke';"
psql bookfind3 -c "select count(a1.id) from fti_author a1,fti_author a2 
where a1.id=a2.id and a1.string ~ '^clarke' and a2.string ~ '^arthur';"
NOTICE:  QUERY DUMP:

{ NESTLOOP :startup_cost 0.00 :total_cost 9.84 :rows 1 :width 8 :qptargetlist ({ 
TARGETENTRY :resdom { RESDOM :resno 1 :restype 26 :restypmod -1 :resname id :reskey 0 
:reskeyop 0 :ressortgroupref 0 :resjunk false } :expr { VAR :varno 65000 :varattno 1 
:vartype 26 :vartypmod -1  :varlevelsup 0 :varnoold 1 :varoattno 2}}) :qpqual <> 
:lefttree { INDEXSCAN :startup_cost 0.00 :total_cost 4.91 :rows 1 :width 4 
:qptargetlist ({ TARGETENTRY :resdom { RESDOM :resno 1 :restype 26 :restypmod -1 
:resname <> :reskey 0 :reskeyop 0 :ressortgroupref 0 :resjunk false } :expr { VAR 
:varno 2 :varattno 2 :vartype 26 :vartypmod -1  :varlevelsup 0 :varnoold 2 :varoattno 
2}}) :qpqual ({ EXPR :typeOid 16  :opType op :oper { OPER :opno 1063 :opid 1254 
:opresulttype 16 } :args ({ VAR :varno 2 :varattno 1 :vartype 1043 :vartypmod 54  
:varlevelsup 0 :varnoold 2 :varoattno 1} { CONST :consttype 25 :constlen -1 
:constisnull false :constvalue  11 [ 11 0 0 0 94 97 114 116 104 117 114 ]  :constbyval 
false })}) :lefttree <> :righttree <> :extprm () :locprm () :initplan <> :nprm 0  
:scanrelid 2 :indxid ( 29829975) :indxqual (({ EXPR :typeOid 16  :opType op :oper { 
OPER :opno 1069 :opid 1074 :opresulttype 16 } :args ({ VAR :varno 2 :varattno 1 
:vartype 1043 :vartypmod 54  :varlevelsup 0 :varnoold 2 :varoattno 1} { CONST 
:consttype 1043 :constlen -1 :constisnull false :constvalue  10 [ 10 0 0 0 97 114 116 
104 117 114 ]  :constbyval false })} { EXPR :typeOid 16  :opType op :oper { OPER :opno 
1066 :opid 1071 :opresulttype 16 } :args ({ VAR :varno 2 :varattno 1 :vartype 1043 
:vartypmod 54  :varlevelsup 0 :varnoold 2 :varoattno 1} { CONST :consttype 1043 
:constlen -1 :constisnull false :constvalue  10 [ 10 0 0 0 97 114 116 104 117 115 ]  
:constbyval false })})) :indxqualorig (({ EXPR :typeOid 16  :opType op :oper { OPER 
:opno 1069 :opid 1074 :opresulttype 16 } :args ({ VAR :varno 2 :varattno 1 :vartype 
1043 :vartypmod 54  :varlevelsup 0 :varnoold 2 :varoattno 1} { CONST :consttype 1043 
:constlen -1 :constisnull false :constvalue  10 [ 10 0 0 0 97 114 116 104 117 114 ]  
:constbyval false })} { EXPR :typeOid 16  :opType op :oper { OPER :opno 1066 :opid 
1071 :opresulttype 16 } :args ({ VAR :varno 2 :varattno 1 :vartype 1043 :vartypmod 54  
:varlevelsup 0 :varnoold 2 :varoattno 1} { CONST :consttype 1043 :constlen -1 
:constisnull false :constvalue  10 [ 10 0 0 0 97 114 116 104 117 115 ]  :constbyval 
false })})) :indxorderdir 1 } :righttree { INDEXSCAN :startup_cost 0.00 :total_cost 
4.91 :rows 1 :width 4 :qptargetlist ({ TARGETENTRY :resdom { RESDOM :resno 1 :restype 
26 :restypmod -1 :resname <> :reskey 0 :reskeyop 0 :ressortgroupref 0 :resjunk false } 
:expr { VAR :varno 1 :varattno 2 :vartype 26 :vartypmod -1  :varlevelsup 0 :varnoold 1 
:varoattno 2}}) :qpqual ({ EXPR :typeOid 16  :opType op :oper { OPER :opno 1063 :opid 
1254 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 1 :vartype 1043 :vartypmod 54  
:varlevelsup 0 :varnoold 1 :varoattno 1} { CONST :consttype 25 :constlen -1 
:constisnull false :constvalue  11 [ 11 0 0 0 94 99 108 97 114 107 101 ]  :constbyval 
false })}) :lefttree <> :righttree <> :extprm () :locprm () :initplan <> :nprm 0  
:scanrelid 1 :indxid ( 29829975) :indxqual (({ EXPR :typeOid 16  :opType op :oper { 
OPER :opno 1069 :opid 1074 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 1 
:vartype 1043 :vartypmod 54  :varlevelsup 0 :varnoold 1 :varoattno 1} { CONST 
:consttype 1043 :constlen -1 :constisnull false :constvalue  10 [ 10 0 0 0 99 108 97 
114 107 101 ]  :constbyval false })} { EXPR :typeOid 16  :opType op :oper { OPER :opno 
1066 :opid 1071 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 1 :vartype 1043 
:vartypmod 54  :varlevelsup 0 :varnoold 1 :varoattno 1} { CONST :consttype 1043 
:constlen -1 :constisnull false :constvalue  10 [ 10 0 0 0 99 108 97 114 107 102 ]  
:constbyval false })})) :indxqualorig (({ EXPR :typeOid 16  :opType op :oper { OPER 
:opno 1069 :opid 1074 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 1 :vartype 
1043 :vartypmod 54  :varlevelsup 0 :varnoold 1 :varoattno 1} { CONST :consttype 1043 
:constlen -1 :constisnull false :constvalue  10 [ 10 0 0 0 99 108 97 114 107 101 ]  
:constbyval false })} { EXPR :typeOid 16  :opType op :oper { OPER :opno 1066 :opid 
1071 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 1 :vartype 1043 :vartypmod 54  
:varlevelsup 0 :varnoold 1 :varoattno 1} { CONST :consttype 1043 :constlen -1 
:constisnull false :constvalue  10 [ 10 0 0 0 99 108 97 114 107 102 ]  :constbyval 
false })})) :indxorderdir 1 } :extprm () :locprm () :initplan <> :nprm 0  :jointype 0 
:joinqual ({ EXPR :typeOid 16  :opType op :oper { OPER :opno 607 :opid 184 
:opresulttype 16 } :args ({ VAR :varno 65000 :varattno 1 :vartype 26 :vartypmod -1  
:varlevelsup 0 :varnoold 1 :varoattno 2} { VAR :varno 65001 :varattno 1 :vartype 26 
:vartypmod -1  :varlevelsup 0 :varnoold 2 :varoattno 2})})}
NOTICE:  QUERY PLAN:

Nested Loop  (cost=0.00..9.84 rows=1 width=8)
  ->  Index Scan using fti_author_s on fti_author a2  (cost=0.00..4.91 rows=1 width=4)
  ->  Index Scan using fti_author_s on fti_author a1  (cost=0.00..4.91 rows=1 width=4)

EXPLAIN

Reply via email to