From: | Peter Wilson <petew(at)yellowhawk(dot)co(dot)uk> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Indexes |
Date: | 2005-08-02 12:28:57 |
Message-ID: | dcnou6$2mbp$1@news.hub.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Jake Stride wrote:
> Hi,
>
> I have a table set up:
>
> \d companycontactmethod
> Table "public.companycontactmethod"
> Column | Type | Modifiers
> -----------+-------------------+------------------------
> tag | character varying | not null
> contact | character varying | not null
> type | character(1) | not null
> companyid | bigint | not null
> name | character varying | not null
> main | boolean | not null default false
> billing | boolean | not null default false
> shipping | boolean | not null default false
> payment | boolean | not null default false
> technical | boolean | not null default false
> Indexes:
> "companycontactmethod_pkey" PRIMARY KEY, btree (companyid, name, "type")
> "companycontactmethod_companyid" btree (companyid)
> "companycontactmethod_main_type" btree (main, "type")
> Foreign-key constraints:
> "$1" FOREIGN KEY (companyid) REFERENCES company(id) ON UPDATE
> CASCADE ON DELETE CASCADE
>
> and am running the following:
>
> explain analyse SELECT companycontactmethod.tag,
> companycontactmethod.contact, companycontactmethod."type",
> companycontactmethod.companyid FROM companycontactmethod WHERE
> companycontactmethod.main AND companycontactmethod.type = 'E';
> QUERY PLAN
> ------------------------------------------------------------------------------------------------------------------------
> Seq Scan on companycontactmethod (cost=0.00..181.10 rows=2079
> width=40) (actual time=0.027..17.068 rows=2134 loops=1)
> Filter: (main AND ("type" = 'E'::bpchar))
> Total runtime: 25.965 ms
>
> why is it not using the companycontactmethod_main_type index on the
> query? Am I missing something obvious here?
>
> Thanks
>
> Jake
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
> choose an index scan if your joining column's datatypes do not
> match
>
The index is of no use when you specify no value for main. You want any
row that has any value for main, and a value of 'E' for type. Because
you haven't specified a value for 'main' the only solution is to scan
the entire set.
Pete
--
Peter Wilson, YellowHawk Ltd, http://www.yellowhawk.co.uk
From | Date | Subject | |
---|---|---|---|
Next Message | Dan Sugalski | 2005-08-02 13:05:55 | Re: feeding big script to psql |
Previous Message | Richard Huxton | 2005-08-02 12:28:27 | Re: Indexes |