Обсуждение: Need help on a troublesome query plan
On PostgreSQL Version 7.2.1 on Redhat Linux 7.1
Table bld_tb_bus_fact definition
================================
Column | Type | Modifiers
-----------------+-------------------------- +-----------bus_fact_id | bigint | not
nullbus_fact_ts | timestamp with time zone | not nullparty_id | bigint | svc_id
| bigint | not nullbus_fact_data | text | not
nullbus_fact_typ_cd| character(10) | not nullbus_fact_kywrd | character varying(300) | cont_id
| bigint | perfby_id | bigint | Index "bld_x1_tb_bus_fact"
Column | Type
-----------------+---------------party_id | bigintbus_fact_typ_cd | character(10)cont_id | bigint
btree
With the following query on 50000 records:
explain
SELECT bld_TB_BUS_FACT.BUS_FACT_ID AS id
FROM bld_TB_BUS_FACT
WHERE bld_TB_BUS_FACT.PARTY_ID=1320677
AND bld_TB_BUS_FACT.BUS_FACT_TYP_CD='MSG_SENT'
AND bld_TB_BUS_FACT.CONT_ID=786448
AND bld_TB_BUS_FACT.BUS_FACT_KYWRD ILIKE '%MT-ID=3407979%'
AND bld_TB_BUS_FACT.BUS_FACT_KYWRD ILIKE '%S-ID=1310723%'
limit 1;
psql:test.sql:9: NOTICE: QUERY PLAN:
Limit (cost=0.00..2264.16 rows=1 width=8) -> Seq Scan on bld_tb_bus_fact (cost=0.00..2264.16 rows=1 width=8)
EXPLAIN
I don't understand why it's not using the defined index, even after performing VACUUM FULL ANALYZE on the table.
I tried disabling seqscan but that didn't change anything.
I'm open to suggestions anyone
Thanks!
----------------------------------------------------------------------------------------
Alain Lavigne - Data Administrator - ZAQ Interactive Solutions E-Mail: alavigne@zaq.com
297 St-Paul, West - Montreal, Quebec, Canada - H2Y 2A5
Phone: 514-282-7073 ext: 371 - Fax: 514-282-8011
On Tue, 16 Jul 2002, Alain Lavigne wrote: > Index "bld_x1_tb_bus_fact" > Column | Type > -----------------+--------------- > party_id | bigint > bus_fact_typ_cd | character(10) > cont_id | bigint > btree > > With the following query on 50000 records: > > explain > SELECT bld_TB_BUS_FACT.BUS_FACT_ID AS id > FROM bld_TB_BUS_FACT > WHERE bld_TB_BUS_FACT.PARTY_ID=1320677 > AND bld_TB_BUS_FACT.BUS_FACT_TYP_CD='MSG_SENT' > AND bld_TB_BUS_FACT.CONT_ID=786448 > AND bld_TB_BUS_FACT.BUS_FACT_KYWRD ILIKE '%MT-ID=3407979%' > AND bld_TB_BUS_FACT.BUS_FACT_KYWRD ILIKE '%S-ID=1310723%' > limit 1; You'll need to either single quote or explicitly cast the constants you're comparing to the bigint columns.
On Tue, 16 Jul 2002, Alain Lavigne wrote: > Thanks that worked, but why does that happen or maybe you could point > to the proper thread so I read up on it. It's an issue that the numeric constant gets cast to int4 somewhat prematurely. I don't have a pointer to a thread off hand, but if you search the archives you should find a couple.
Thanks that worked, but why does that happen or maybe you could point to the proper thread so I read up on it. ---------------------------------------------------------------------------------------- Alain Lavigne - Data Administrator - ZAQ Interactive Solutions E-Mail: alavigne@zaq.com 297 St-Paul, West - Montreal, Quebec, Canada - H2Y 2A5 Phone: 514-282-7073 ext: 371 - Fax: 514-282-8011 -----Original Message----- From: Stephan Szabo [mailto:sszabo@megazone23.bigpanda.com] Sent: July 16, 2002 14:52 To: Alain Lavigne Cc: pgsql-sql@postgresql.org Subject: Re: [SQL] Need help on a troublesome query plan On Tue, 16 Jul 2002, Alain Lavigne wrote: > Index "bld_x1_tb_bus_fact" > Column | Type > -----------------+--------------- > party_id | bigint > bus_fact_typ_cd | character(10) > cont_id | bigint > btree > > With the following query on 50000 records: > > explain > SELECT bld_TB_BUS_FACT.BUS_FACT_ID AS id > FROM bld_TB_BUS_FACT > WHERE bld_TB_BUS_FACT.PARTY_ID=1320677 > AND bld_TB_BUS_FACT.BUS_FACT_TYP_CD='MSG_SENT' > AND bld_TB_BUS_FACT.CONT_ID=786448 > AND bld_TB_BUS_FACT.BUS_FACT_KYWRD ILIKE '%MT-ID=3407979%' > AND bld_TB_BUS_FACT.BUS_FACT_KYWRD ILIKE '%S-ID=1310723%' > limit 1; You'll need to either single quote or explicitly cast the constants you're comparing to the bigint columns.