On 4 Jan 2010, at 2:38pm, Jeremy Zeiber wrote:

> That particular query runs in ~ 30 seconds with outerdetail.header or 
> header.headerid.  I do have another query which gives the same result 
> that doesn't quite run as fast as the first, but it is certainly faster 
> than the second:
> 
> SELECT headerid,
> (SELECT (SELECT COUNT(DISTINCT data) FROM detail WHERE 
> headerid=header.headerid)-COUNT(DISTINCT one.data) FROM detail AS one 
> INNER JOIN detail AS two ON one.data=two.data WHERE 
> two.headerid<one.headerid AND one.headerid=header.headerid) AS newcount
> FROM header GROUP BY headerid;
> 
> That runs in about 3 seconds.  Still, there are only a few thousand rows 
> in the test database, and the real data is going to have hundreds of 
> thousands of rows, and this is just a small portion of the query.  Is 
> there any way to rewrite the query to a better performing one?

Do you have the appropriate indexes defined ?  I see lots of matching and WHERE 
clauses and your query may not be finding an index that can do all that work 
for it.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to