I posted two things I thought might be bugs about an hour ago with postgresql-7.1.3-1PGDG. I just ran a regression test with postgresql-7.0.3 and one problem vanished and one stayed. (yes I vacuum analyzed) 1) the select * from foo where text_field like 'foo%' will do an index scan with my data in 7.0.3 but not 7.1.3-1PGDG. Makes me think there's a bug. 2) the select * from foo where order_date = current_date and select * from foo where order_date < to_date(xxx) and order_date > to_date(yyy) Both do sequence scans where current date is indexed on both 7.0.3 and 7.1.3. This leaves me quite confused since there are 300,000 rows and a sequential scan is doomed to take 15 to 20 seconds. The few queries that do use an index (indexed off of last_name for instance) come back in 1 or 2 seconds. Am I doing something wrong? The data is the same type so I don't need to cast, right? What other tricks are there to get the query planner to be smart? Orion Here's my exact table structure: fdb=# \d mfps_orderinfo_435 Table "mfps_orderinfo_435" Attribute | Type | Modifier ---------------------+---------+---------- order_number | integer | not null source_code | text | last_name | text | first_name | text | title | text | address1 | text | address2 | text | city | text | state | text | zip | text | telephone | text | bill_method | text | cc | text | exp | text | cc_auth_code | text | multi_billing_code | text | order_header_status | text | order_date | date | ship_date | date | total_quantity | integer | order_extension | money | sales_tax | money | shipping | money | total_discount | money | return_quantity | integer | return_amount | money | num_billings | integer | tracking_no1 | text | tracking_no2 | text | tracking_no3 | text | email | text | amount_paid | money | Indices: mfps_orderinfo_435_fname, mfps_orderinfo_435_lname, mfps_orderinfo_435_odate, mfps_orderinfo_435_pkey fdb=# \d mfps_orderinfo_435_odate Index "mfps_orderinfo_435_odate" Attribute | Type ------------+------ order_date | date btree fdb=# explain SELECT * FROM mfps_orderinfo_435 WHERE order_date = current_date; NOTICE: QUERY PLAN: Seq Scan on mfps_orderinfo_435 (cost=0.00..14272.07 rows=1340 width=288) EXPLAIN fdb=# explain SELECT count(*) FROM mfps_orderinfo_435 WHERE order_date >= to_date('2001-05-01','YYYY-MM-DD') AND order_date <= to_date('2001-10-10','YYYY-MM-DD'); NOTICE: QUERY PLAN: Aggregate (cost=15115.73..15115.73 rows=1 width=4) -> Seq Scan on mfps_orderinfo_435 (cost=0.00..15031.36 rows=33746 width=4) EXPLAIN fdb=# explain verbose SELECT count(*) FROM mfps_orderinfo_435 WHERE order_date >= to_date('2001-05-01','YYYY-MM-DD') AND order_date <= to_date('2001-10-10','YYYY-MM-DD'); NOTICE: QUERY DUMP: { AGG :startup_cost 15115.73 :total_cost 15115.73 :rows 1 :width 4 :state <> :qptargetlist ({ TARGETENTRY :resdom { RESDOM :resno 1 :restype 23 :restypmod -1 :resname count :reskey 0 :reskeyop 0 :ressortgroupref 0 :resjunk false } :expr { AGGREG :aggname count :basetype 0 :aggtype 23 :target { CONST :consttype 23 :constlen 4 :constisnull false :constvalue 4 [ 1 0 0 0 ] :constbyval true } :usenulls false :aggstar true :aggdistinct false }}) :qpqual <> :lefttree { SEQSCAN :startup_cost 0.00 :total_cost 15031.36 :rows 33746 :width 4 :state <> :qptargetlist <> :qpqual ({ EXPR :typeOid 16 :opType op :oper { OPER :opno 1098 :opid 1090 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 18 :vartype 1082 :vartypmod -1 :varlevelsup 0 :varnoold 1 :varoattno 18} { EXPR :typeOid 1082 :opType func :oper { FUNC :funcid 1780 :functype 1082 :funcisindex false :funcsize 0 :func_fcache @ 0x0 :func_tlist ({ TARGETENTRY :resdom { RESDOM :resno 1 :restype 1082 :restypmod -1 :resname \<noname> :reskey 0 :reskeyop 0 :ressortgroupref 0 :resjunk false } :expr { VAR :varno -1 :varattno 1 :vartype 1082 :vartypmod -1 :varlevelsup 0 :varnoold -1 :varoattno 1}}) :func_planlist <>} :args ({ CONST :consttype 25 :constlen -1 :constisnull false :constvalue 14 [ 14 0 0 0 50 48 48 49 45 48 53 45 48 49 ] :constbyval false } { CONST :consttype 25 :constlen -1 :constisnull false :constvalue 14 [ 14 0 0 0 89 89 89 89 45 77 77 45 68 68 ] :constbyval false })})} { EXPR :typeOid 16 :opType op :oper { OPER :opno 1096 :opid 1088 :opresulttype 16 } :args ({ VAR :varno 1 :varattno 18 :vartype 1082 :vartypmod -1 :varlevelsup 0 :varnoold 1 :varoattno 18} { EXPR :typeOid 1082 :opType func :oper { FUNC :funcid 1780 :functype 1082 :funcisindex false :funcsize 0 :func_fcache @ 0x0 :func_tlist ({ TARGETENTRY :resdom { RESDOM :resno 1 :restype 1082 :restypmod -1 :resname \<noname> :reskey 0 :reskeyop 0 :ressortgroupref 0 :resjunk false } :expr { VAR :varno -1 :varattno 1 :vartype 1082 :vartypmod -1 :varlevelsup 0 :varnoold -1 :varoattno 1}}) :func_planlist <>} :args ({ CONST :consttype 25 :constlen -1 :constisnull false :constvalue 14 [ 14 0 0 0 50 48 48 49 45 49 48 45 49 48 ] :constbyval false } { CONST :consttype 25 :constlen -1 :constisnull false :constvalue 14 [ 14 0 0 0 89 89 89 89 45 77 77 45 68 68 ] :constbyval false })})}) :lefttree <> :righttree <> :extprm () :locprm () :initplan <> :nprm 0 :scanrelid 1 } :righttree <> :extprm () :locprm () :initplan <> :nprm 0 } NOTICE: QUERY PLAN: Aggregate (cost=15115.73..15115.73 rows=1 width=4) -> Seq Scan on mfps_orderinfo_435 (cost=0.00..15031.36 rows=33746 width=4) EXPLAIN ---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives? http://archives.postgresql.org