X-Original-To: pgsql-sql@postgresql.org Received: from serwer.skawsoft.com.pl (serwer.skawsoft.com.pl [213.25.37.66]) by postgresql.org (Postfix) with ESMTP id C2A32475C15 for ; Mon, 10 Mar 2003 04:35:14 -0500 (EST) Received: from klaster.net (ph106.krakow.cvx.ppp.tpnet.pl [217.99.208.106]) by serwer.skawsoft.com.pl (Postfix) with ESMTP id 5AEAA2B88F; Mon, 10 Mar 2003 10:32:25 +0100 (CET) Message-ID: <3E6C56EF.6050609@klaster.net> Date: Mon, 10 Mar 2003 10:12:15 +0100 From: Tomasz Myrta User-Agent: Mozilla/5.0 (Windows; U; Win 9x 4.90; PL; rv:1.1) Gecko/20020826 X-Accept-Language: pl, en-us, en MIME-Version: 1.0 To: Andre Schubert Cc: pgsql-sql@postgresql.org Subject: Re: Help on indexing timestamps References: <20030307112639.395720be.andre@km3.de> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Archive-Number: 200303/237 X-Sequence-Number: 12277 Andre Schubert wrote: > Hi all, > > i have a little problem on indexing a table which contains > about 4 millions of traffic-data. > My problem is, that a want to select all data from > a specific month from a specific ip and this select should use the index. > I use the following select: > > db_nmkm3aue=# explain analyze select sum(inet_up+inet_down) from tbl_traffic where date_trunc('month',tbl_traffic.time_stamp)::timestamptz = date_trunc('month',now() - timespan('1 months')) and ip = '80.243.38.57'; > NOTICE: QUERY PLAN: > > Aggregate (cost=116.30..116.30 rows=1 width=16) (actual time=1620.79..1620.79 rows=1 loops=1) > -> Index Scan using idx_ip_time_stamp on tbl_traffic (cost=0.00..116.30 rows=1 width=16) (actual time=1216.79..1579.89 rows=5232 loops=1) > Total runtime: 1620.94 msec > > But it takes a long time to select the traffic for all Ips. > Is there a way to select these data with using the index correctly ? > > Thanks in advance > I have one more solution - try to rewrite your where clause to NOT USE function on time_stamp. If your query will look like: select ... where time_stamp between (function with now() returning first day) and (function with now() returning last day); your index will work fine. Regards, Tomasz Myrta