2010/1/4 Simon Slavin <slav...@bigfraud.org>:
>
> 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.

indeed:
create index i on detail( data );

seems to improve performance

>
> Simon.

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

Reply via email to