Received: from localhost (maia-3.hub.org [200.46.204.184]) by postgresql.org (Postfix) with ESMTP id 9C0CC9FB57E for ; Mon, 9 Apr 2007 21:45:59 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.184]) (amavisd-maia, port 10024) with ESMTP id 59077-03 for ; Mon, 9 Apr 2007 21:45:50 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.4 Received: from nz-out-0506.google.com (nz-out-0506.google.com [64.233.162.231]) by postgresql.org (Postfix) with ESMTP id 1E7509FB3E4 for ; Mon, 9 Apr 2007 21:45:54 -0300 (ADT) Received: by nz-out-0506.google.com with SMTP id r28so1217678nza for ; Mon, 09 Apr 2007 17:45:54 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=HCEKXEg0SV133jp++RzuAGD9dOnzWKwINVvGjVKVHdows4kxfsZCVUmlm48Wau25vtfObTsWyLZmdKTC3UCzsRLFMDP76YebyUKB81QL5v5axQ0xYiWErgnhBrg20zVuajyM0mq0yLoufPYqubC9lHDnW+rfkGLHvCXNuFb67+E= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=HsNQ1MVKmyhMHQXdSD3N/4BQwgIqJqULHizXyW67Ar5YRSwEvMjIrqjzYhrIgNpwXS+B3axdQzrY20USjEM+FU7Iu7vZWW+I6Q6osj/kzvSIOdhObHzPzzWkpFLKD+UJqj37hlqDrJPoD9wY6hmJFsonxAHO1gQXRJdn5gYIocM= Received: by 10.114.152.17 with SMTP id z17mr2578326wad.1176165953543; Mon, 09 Apr 2007 17:45:53 -0700 (PDT) Received: by 10.114.93.14 with HTTP; Mon, 9 Apr 2007 17:45:53 -0700 (PDT) Message-ID: <24b53fa00704091745l560d40ccxec49d7d09e7a97e@mail.gmail.com> Date: Mon, 9 Apr 2007 17:45:53 -0700 From: "s d" To: "Jan de Visser" Subject: Re: Beginner Question Cc: pgsql-performance@postgresql.org In-Reply-To: <200704090751.53347.jdevisser@digitalfairway.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <24b53fa00704090209pcdd2c6cof487d6388c1743b8@mail.gmail.com> <200704090751.53347.jdevisser@digitalfairway.com> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200704/220 X-Sequence-Number: 24097 Hi Jan, Adding this Index slowed down things by a factor of 4. Also, the performance is so horrible (example bellow) that i am certain i am doing something wrong. Does the following explain gives any ideas ? Thanks =# EXPLAIN ANALYZE select * from word_association where (word1 ='the' or word2='the') and count > 10; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------ Bitmap Heap Scan on word_association (cost=250.86..7256.59 rows=4624 width=22) (actual time=13.461..211.568 rows=6601 loops=1) Recheck Cond: (((word1)::text = 'the'::text) OR ((word2)::text = 'the'::text)) Filter: (count > 10) -> BitmapOr (cost=250.86..250.86 rows=12243 width=0) (actual time=9.052..9.052 rows=0 loops=1) -> Bitmap Index Scan on word_association_index1_1 (cost=0.00..153.20 rows=7579 width=0) (actual time=5.786..5.786 rows=7232 loops=1) Index Cond: ((word1)::text = 'the'::text) -> Bitmap Index Scan on word_association_index2_1 (cost=0.00..95.34 rows=4664 width=0) (actual time=3.253..3.253 rows=4073 loops=1) Index Cond: ((word2)::text = 'the'::text) Total runtime: 219.987 ms (9 rows) On 4/9/07, Jan de Visser wrote: > On Monday 09 April 2007 05:09:53 s d wrote: > > Hi, > > I am trying to figure out how to debug a performance problem / use psql > > explain. The table in question is: > > # \d word_association; > > Table "public.word_association" > > Column | Type | Modifiers > > --------+------------------------+-------------------- > > word1 | character varying(128) | not null > > word2 | character varying(128) | not null > > count | integer | not null default 0 > > Indexes: > > "word1_word2_comb_unique" unique, btree (word1, word2) > > "word1_hash_index" hash (word1) > > "word2_hash_index" hash (word2) > > "word_association_count_index" btree (count) > > "word_association_index1_1" btree (word1) > > "word_association_index2_1" btree (word2) > > > > It has multiple indices since i wanted to see which one the planner choses. > > > > > > # explain select * FROM word_association WHERE (word1 = 'bdss' OR > > word2 = 'bdss') AND count >= 10; > > QUERY PLAN > > --------------------------------------------------------------------------- > >--------------------- Bitmap Heap Scan on word_association > > (cost=11.53..1192.09 rows=155 width=22) Recheck Cond: (((word1)::text = > > 'bdss'::text) OR ((word2)::text = 'bdss'::text)) > > Filter: (count >= 10) > > -> BitmapOr (cost=11.53..11.53 rows=364 width=0) > > -> Bitmap Index Scan on word_association_index1_1 > > (cost=0.00..5.79 rows=190 width=0) > > Index Cond: ((word1)::text = 'bdss'::text) > > -> Bitmap Index Scan on word_association_index2_1 > > (cost=0.00..5.67 rows=174 width=0) > > Index Cond: ((word2)::text = 'bdss'::text) > > (8 rows) > > > > The questions: > > 1. i can undestand where the cost=11.53 came from but where did the > > 1192.09 come form? The values are in milli right ? > > 2. the query takes in reality much longer than 1 second. > > > > In short, it feels like something is very wrong here (i tried vacuum > > analyze and it didn't do much diff). > > any ideas ? > > You need an index on (word1, word2, count). In your current setup it will have > to scan all rows that satisfy word1 and word2 to see if count >= 10. > > jan > > > -- > -------------------------------------------------------------- > Jan de Visser jdevisser@digitalfairway.com > > Baruk Khazad! Khazad ai-menu! > -------------------------------------------------------------- >