Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 667AA476A44 for ; Thu, 26 Sep 2002 15:12:42 -0400 (EDT) Received: from news.hub.org (news.hub.org [64.49.215.80]) by postgresql.org (Postfix) with ESMTP id 00C8A47606A for ; Thu, 26 Sep 2002 15:12:42 -0400 (EDT) Received: by news.hub.org (Postfix, from userid 8) id 7CB12381659; Thu, 26 Sep 2002 15:12:41 -0400 (EDT) From: "Kevin Traub" X-Newsgroups: comp.databases.postgresql.sql Subject: Help tuning query Date: Thu, 26 Sep 2002 15:12:38 -0400 Organization: Hub.Org Networking Services (http://www.hub.org) Lines: 85 Message-ID: X-Complaints-To: news@hub.org X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 To: pgsql-sql@postgresql.org X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200209/372 X-Sequence-Number: 9649 All; Can anyone please help with the tuning of this query? With 77000 rows in the operator_messages database the query is taking almost 15 seconds to return. Preference woul dbe under 5 seconds if possible. System load on a dual processor P3 with 1.5GB of memory remains under .4 during the query. The query and explain are noted below as well as description of the tables; Note both ANALYZE and VACUUM have been run numerous times. any help would be appreciated. -Kev virgin=# explain SELECT opr.msg_id, opr.status, opc.std_time virgin-# FROM op_msg_folder opc, operator_messages opr virgin-# WHERE opr.username = 'khp' virgin-# AND opr.foldername = 'inbox' virgin-# and opr.msg_id = opc.msg_id; NOTICE: QUERY PLAN: Merge Join (cost=25037.29..27675.47 rows=47958 width=54) -> Index Scan using opmf_i on op_msg_folder opc (cost=0.00..1797.37 rows=48579 width=32) -> Sort (cost=25037.29..25037.29 rows=47958 width=22) -> Seq Scan on operator_messages opr (cost=0.00..20722.26 rows=47958 width=22) virgin=# \d operator_messages Table "operator_messages" Column | Type | Modifiers ------------+--------------+----------- msg_id | numeric | username | text | foldername | text | status | character(1) | Indexes: op_msgs_i, opr_msgs_foldername_i, opr_msgs_username_i virgin=# \d op_msgs_i Index "op_msgs_i" Column | Type --------+--------- msg_id | numeric btree virgin=# \d opr_msgs_foldername_i Index "opr_msgs_foldername_i" Column | Type ------------+------ foldername | text btree virgin=# \d opr_msgs_username_i Index "opr_msgs_username_i" Column | Type ----------+------ username | text btree virgin=# \d op_msg_folder Table "op_msg_folder" Column | Type | Modifiers ----------------+--------------+----------- msg_id | numeric | status | character(1) | std_time | text | julian_time | text | smi | character(3) | description | text | type | text | flight | text | tail | text | dep_station | text | dest_station | text | op_description | text | Unique keys: opmf_i virgin=# \d opmf_i; Index "opmf_i" Column | Type --------+--------- msg_id | numeric unique btree