pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Brent Dombrowski <brent.dombrowski@gmail.com>
To: raju@linux-delhi.org
Cc: pgsql-sql <pgsql-sql@postgresql.org>
Subject: Re: Correlating Asterisk CDRs
Date: Wed, 7 Dec 2011 09:13:04 -0800
Message-ID: <BCCDD830-72EB-4483-819E-5E2FD30381C0@gmail.com> (raw)
In-Reply-To: <201112072004.29661.raju@linux-delhi.org>
References: <201112072004.29661.raju@linux-delhi.org>

On Dec 7, 2011, at 6:34 AM, Raj Mathur (राज माथुर) wrote:

> Hi,
> 
> I'm trying to correlate Call Data Records (CDRs) from two Asterisk
> servers, one of which uses the other for telephony.  The data is in
> the tables cdr and cdr2.  With some indexes, the query and explain
> result are:
> 
> explain analyse select cdr.calldate, cdr2.calldate,
> (cdr2.calldate-cdr.calldate) as rtdur, cdr.clid, cdr.dst, cdr2.src,
> cdr2.dst, cdr2.dstchannel, cdr2.lastapp, cdr2.duration,
> cdr2.disposition from cdr, cdr2 where cdr2.calldate >= cdr.calldate
> and cdr.clid=cdr2.clid and cdr.dst=substring(cdr2.dst from 4) order by
> cdr.calldate, cdr2.calldate, cdr.clid limit 100;
> 
>                                                             QUERY PLAN                                                                  
> ---------------------------------------------------------------------------------------------------------------------------------------------
> Limit  (cost=46782.15..46782.40 rows=100 width=109) (actual time=4077.866..4078.054 
> rows=100 loops=1)
>   ->  Sort  (cost=46782.15..46785.33 rows=1272 width=109) (actual time=4077.863..4077.926 
> rows=100 loops=1)
>         Sort Key: cdr.calldate, cdr2.calldate, cdr.clid
>         Sort Method:  top-N heapsort  Memory: 42kB
>         ->  Merge Join  (cost=2.95..46733.54 rows=1272 width=109) (actual 
> time=0.070..3799.546 rows=168307 loops=1)
>               Merge Cond: (((cdr.clid)::text = (cdr2.clid)::text) AND ((cdr.dst)::text = 
> "substring"((cdr2.dst)::text, 4)))
>               Join Filter: (cdr2.calldate >= cdr.calldate)
>               ->  Index Scan using ick1 on cdr  (cost=0.00..34667.86 rows=208798 
> width=43) (actual time=0.022..434.246 rows=208798 loops=1)
>               ->  Index Scan using i2k1 on cdr2  (cost=0.00..9960.89 rows=65449 width=88) 
> (actual time=0.011..391.599 rows=240981 loops=1)
> Total runtime: 4078.184 ms
> (10 rows)
> 
> Is there any way to make this query faster?  I already have an index
> i2k1 on substring(cdr2.dst from 4), which is being used.
> 
> Application
> -----------
> 
> I'm looking for all caller records in cdr2 that have the same callerid
> (clid) and destination (dst) and were started on cdr2 after they were
> started on cdr.  cdr2.dst is the same as cdr.dst but with a
> 3-character prefix.
> 
> Regards,
> 
> -- Raj
> -- 
> Raj Mathur                          || raju@kandalaya.org   || GPG:
> http://otheronepercent.blogspot.com || http://kandalaya.org || CC68
> It is the mind that moves           || http://schizoid.in   || D17F
> 
> -- 
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql


You have a non-equi join in there (cdr2.calldate >= cdr.calldate). I would try to get rid of that. It's increasing the number of rows in the result set and will only get worse as your data set grows.

Brent.




view thread (9+ messages)  latest in thread

Message-ID: <BCCDD830-72EB-4483-819E-5E2FD30381C0@gmail.com>
Permalink:  ../BCCDD830-72EB-4483-819E-5E2FD30381C0@gmail.com/
Also on:    postgresql.org/message-id/BCCDD830-72EB-4483-819E-5E2FD30381C0@gmail.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: brent.dombrowski@gmail.com, raju@linux-delhi.org
  Subject: Re: Correlating Asterisk CDRs
  In-Reply-To: <BCCDD830-72EB-4483-819E-5E2FD30381C0@gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox