X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id C0904528F3 for ; Fri, 10 Jun 2005 21:14:05 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 82767-09 for ; Sat, 11 Jun 2005 00:14:04 +0000 (GMT) Received: from hosting.commandprompt.com (128.commandprompt.com [207.173.200.128]) by svr1.postgresql.org (Postfix) with ESMTP id 052E652823 for ; Fri, 10 Jun 2005 21:14:03 -0300 (ADT) Received: from [192.168.1.100] (clbb-248.saw.net [64.146.135.248]) (authenticated bits=0) by hosting.commandprompt.com (8.12.8/8.12.8) with ESMTP id j5B03xa3000338; Fri, 10 Jun 2005 17:04:00 -0700 Message-ID: <42AA2CE9.8040901@commandprompt.com> Date: Fri, 10 Jun 2005 17:14:33 -0700 From: "Joshua D. Drake" Organization: Command Prompt, Inc. User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050404) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Clark Slater Cc: pgsql-performance@postgresql.org Subject: Re: faster search References: <20050610132812.R94573@vbp2.vbp2.com> <42A9D556.7070108@arbash-meinel.com> <20050610200358.R40688@vbp2.vbp2.com> In-Reply-To: <20050610200358.R40688@vbp2.vbp2.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.027 tagged_above=0 required=5 tests=AWL X-Spam-Level: X-Archive-Number: 200506/250 X-Sequence-Number: 12887 Clark Slater wrote: > hmm, i'm baffled. i simplified the query > and it is still taking forever... What happens if you: alter table test alter column productlistid set statistics 150; alter table test alter column typeid set statistics 150; explain analyze select * from test where (productlistid=3 and typeid=9); Sincerely, Joshua D. Drake > > > test > ------------------------- > id | integer > partnumber | character varying(32) > productlistid | integer > typeid | integer > > > Indexes: > "test_productlistid" btree (productlistid) > "test_typeid" btree (typeid) > "test_productlistid_typeid" btree (productlistid, typeid) > > > explain analyze select * from test where (productlistid=3 and typeid=9); > > QUERY PLAN > ----------------------------------------------------------------------- > Seq Scan on test (cost=0.00..96458.27 rows=156194 width=725) (actual > time=516.459..41930.250 rows=132528 loops=1) > Filter: ((productlistid = 3) AND (typeid = 9)) > Total runtime: 41975.154 ms > (3 rows) > > > System specs: > PostgreSQL 7.4.2 on RedHat 9 > dual AMD Athlon 2GHz processors > 1 gig memory > mirrored 7200 RPM IDE disks > > > On Fri, 10 Jun 2005, John A Meinel wrote: > >> Clark Slater wrote: >> >>> Hi- >>> >>> Would someone please enlighten me as >>> to why I'm not seeing a faster execution >>> time on the simple scenario below? >>> >>> there are 412,485 rows in the table and the >>> query matches on 132,528 rows, taking >>> almost a minute to execute. vaccuum >>> analyze was just run. >> >> >> Well, if you are matching 130k out of 400k rows, then a sequential scan >> is certainly prefered to an index scan. And then you have to sort those >> 130k rows by partnumber. This *might* be spilling to disk depending on >> what your workmem/sortmem is set to. >> >> I would also say that what you would really want is some way to get the >> whole thing from an index. And I think the way to do that is: >> >> CREATE INDEX test_partnum_listid_typeid_idx ON >> test(partnumber, productlistid, typeid); >> >> VACUUM ANALYZE test; >> >> EXPLAIN ANALYZE SELECT * FROM test >> WHERE productlistid=3 AND typeid=9 >> ORDER BY partnumber, productlistid, typeid >> LIMIT 15 >> ; >> >> The trick is that you have to match the order by exactly with the index, >> so the planner realizes it can do an indexed lookup to get the >> information. >> >> You could also just create an index on partnumber, and see how that >> affects your original query. I think the planner could use an index >> lookup on partnumber to get the ordering correct. But it will have to do >> filtering after the fact based on productlistid and typeid. >> With my extended index, I think the planner can be smarter and lookup >> all 3 by the index. >> >>> >>> Thanks! >>> Clark >> >> >> Good luck, >> John >> =:-> >> > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) -- Your PostgreSQL solutions provider, Command Prompt, Inc. 24x7 support - 1.800.492.2240, programming, and consulting Home of PostgreSQL Replicator, plPHP, plPerlNG and pgPHPToolkit http://www.commandprompt.com / http://www.postgresql.org