X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.2]) by svr1.postgresql.org (Postfix) with ESMTP id 320ABD1B486 for ; Tue, 6 Apr 2004 14:06:45 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (neptune.hub.org [200.46.204.2]) (amavisd-new, port 10024) with ESMTP id 40935-04 for ; Tue, 6 Apr 2004 14:06:43 -0300 (ADT) Received: from mail1.elevating.com (wsip-68-99-77-237.tu.ok.cox.net [68.99.77.237]) by svr1.postgresql.org (Postfix) with ESMTP id 9690DD1BAF8 for ; Tue, 6 Apr 2004 14:06:41 -0300 (ADT) Received: from bretsony.hugheshome.org (bretdell.brets.elevating.com [10.23.0.50]) (authenticated) by mail1.elevating.com (8.11.6/8.11.6) with ESMTP id i36H6YF11012 for ; Tue, 6 Apr 2004 12:06:34 -0500 Subject: distinct values without seq scan From: Bret Hughes To: postgresql sql list Content-Type: text/plain Content-Transfer-Encoding: 7bit X-Mailer: Ximian Evolution 1.0.8 (1.0.8-9.7x.1) Date: 06 Apr 2004 12:06:34 -0500 Message-Id: <1081271194.18380.156.camel@bretsony> Mime-Version: 1.0 X-Elevating-MailScanner: Found to be clean X-Elevating-MailScanner-SpamCheck: not spam, SpamAssassin (score=-1.5, required 5, BAYES_00 -1.50) X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200404/44 X-Sequence-Number: 17419 I have a table indexed on a char(35) field and want a query to return a distinct list of the values in this column. Is there some syntactical magic I can do to get these values without a sequential scan? I assume, ( here we go again ) that these values are in the index somewhere and I seem to recall a select DISTINCT using an index in DB2 way back when but I may be mistaken. Searching the archives I found an email that indicated this was possible in 7.4 and infact is the reason I upgraded from 7.2x. The table in question has about 700K rows and grows daily so seq scans hurt more and more all the time. Tips appreciated. elevating=# \d logrecords Table "public.logrecords" Column | Type | Modifiers ------------------+---------------+----------------------------------------------------------- serial | integer | not null default nextval('"logrecords_serial_seq"'::text) city | smallint | not null building | smallint | not null display | integer | not null advertiser | character(35) | not null pagename | character(65) | not null log_date | date | not null exhibition_count | integer | not null Indexes: "logrecords_pkey" primary key, btree (serial) "logrecords_advertiser" btree (advertiser) "logrecords_building" btree (building) "logrecords_city" btree (city) "logrecords_date" btree (log_date) Triggers: "RI_ConstraintTrigger_1709151" AFTER INSERT OR UPDATE ON logrecords FROM cities NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE "RI_FKey_check_ins"('logrec_ref_cities', 'logrecords', 'cities', 'UNSPECIFIED', 'city', 'num') "RI_ConstraintTrigger_1709152" AFTER INSERT OR UPDATE ON logrecords FROM buildings NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE "RI_FKey_check_ins"('logrecords_ref_buildings', 'logrecords', 'buildings', 'UNSPECIFIED', 'building', 'num') "RI_ConstraintTrigger_1709153" AFTER INSERT OR UPDATE ON logrecords FROM displays NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE "RI_FKey_check_ins"('logrecords_ref_display', 'logrecords', 'displays', 'UNSPECIFIED', 'display', 'num') elevating=# explain select distinct advertiser from logrecords; QUERY PLAN -------------------------------------------------------------------------------- Unique (cost=136440.68..139858.43 rows=61 width=39) -> Sort (cost=136440.68..138149.55 rows=683550 width=39) Sort Key: advertiser -> Seq Scan on logrecords (cost=0.00..20785.50 rows=683550 width=39) (4 rows) Bret