X-Original-To: pgsql-general@postgresql.org Received: from spampd.localdomain (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 7199D4762D7; Tue, 8 Apr 2003 15:59:28 -0400 (EDT) Received: from news.hub.org (news.hub.org [64.49.215.80]) by postgresql.org (Postfix) with ESMTP id E817E4762CF; Tue, 8 Apr 2003 15:59:27 -0400 (EDT) Received: by news.hub.org (Postfix, from userid 8) id D7B1943A89E; Tue, 8 Apr 2003 15:59:27 -0400 (EDT) From: "Denis" X-Newsgroups: comp.databases.postgresql.general, comp.databases.postgresql.performance, comp.databases.postgresql.sql Subject: Yet Another (Simple) Case of Index not used Date: Tue, 8 Apr 2003 12:57:16 -0700 Organization: Hub.Org Networking Services (http://www.hub.org) Lines: 68 Message-ID: X-Complaints-To: usenet@news.hub.org X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 To: pgsql-performance@postgresql.org, pgsql-general@postgresql.org, pgsql-sql@postgresql.org X-Spam-Status: No, hits=-5.8 required=5.0 tests=BAYES_10 version=2.50 X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp) X-Archive-Number: 200304/526 X-Sequence-Number: 40591 Hi there, I'm running into a quite puzzling simple example where the index I've created on a fairly big table (465K entries) is not used, against all common sense expectations: The query I am trying to do (fast) is: select count(*) from addresses; This takes more than a second to complete, because, as the 'explain' command shows me, the index created on 'addresses' is not used, and a seq scan is being used. One would assume that the creation of an index would allow the counting of the number of entries in a table to be instantanous? Here are the details: * Using the latest postgresql 7.3.2 release, built and installed from sources on a Linux box, under Red Hat 8.0 * I have an 'addresses' table defined as: Columm | Type ------------------------------- address | text city | char var (20) zip | char var (5) state | char var (2) Unique keys: addresses_idx * I have created a unique index 'addresses_idx' on (address, city, zip, state): \d addresses_idx; Index "addresses_idx" Columm | Type ------------------------------- address | text city | char var (20) zip | char var (5) state | char var (2) unique btree * I did (re)create the index several times * I did run the vacuum analyse command several times * I forced enable_indexscan to true * I forced enable_seqscan to false Despite of all of this, each time I try: ===> explain select count(*) from addresses; I get the following: ===> NOTICE: QUERY PLAN: ===> ===> Aggregate (cost=100012799.89..100012799.89 rows=1 width=0) ===> -> Seq Scan on addresses (cost=100000000.00..100011635.11 rows=465911 width=0) Quite puzzling, isn't it? I've searched a bunch of mailing lists and websites, and found many reports of special cases where it could be argued that the planner may have had a case for choosing seq scanning over idx scanning, but unless I am missing some fundamental concept, there's something wrong here. Any suggestion anyone? Thanks, Denis denis@next2me.com