On average it would be between 10 and 40, certainly no more than 100.
On Thu, Sep 9, 2010 at 2:57 PM, Michael Dykman <mdyk...@gmail.com> wrote: > The filesort is probably necessary because of the number of rows in > the result set to be ordered. How many rows do you get out of this > query? > > - michael dykman > > On Thu, Sep 9, 2010 at 1:53 PM, Phil <freedc....@gmail.com> wrote: > > I wonder if anyone could help with a query which I've been unable to > prevent > > from using a filesort. Might be something obvious I'm overlooking! > > > > I have a table which tracks milestones in distributed computing projects > > > > Create Table: CREATE TABLE `boinc_milestone` ( > > `proj` char(6) NOT NULL, > > `id` int(11) NOT NULL, > > `stat_date` date NOT NULL DEFAULT '0000-00-00', > > `milestone_type` char(1) NOT NULL DEFAULT '0', > > `milestone` double NOT NULL DEFAULT '0', > > `cpid` varchar(32) DEFAULT NULL, > > `team` int(11) DEFAULT NULL, > > PRIMARY KEY (`proj`,`id`,`stat_date`,`milestone`), > > KEY `two` (`proj`,`stat_date`,`id`,`milestone`), > > KEY `cpid` (`cpid`,`proj`,`id`,`stat_date`,`milestone`), > > KEY `team` (`proj`,`team`,`id`,`stat_date`,`milestone`) > > ) ENGINE=MyISAM DEFAULT CHARSET=latin1 > > > > These are added to on a daily basis as users pass the various credit > > milestones so for instance you can end up with rows for > > 1000,5000,10000,50000,1000000 etc on different dates as time goes on. > > > > Now on one page for display I want to show the latest milestone for each > > project for a particular cpid. The query I use is as follows: > > > > select a.proj,a.id,max(stat_date),max(a.milestone) as > > milestone,b.description > > from boinc_milestone a join boinc_projects b on a.proj = b.proj > > where cpid = '$cpid' > > group by proj > > order by stat_date desc > > > > The order by causes the filesort and I can't find an easy way around it. > > > > mysql> explain select a.proj,a.id,max(stat_date),max(a.milestone) as > > milestone,b.description from boinc_milestone a join boinc_projects b on > > a.proj = b.proj where cpid = 'XXX' group by proj order by stat_date\G > > *************************** 1. row *************************** > > id: 1 > > select_type: SIMPLE > > table: a > > type: ref > > possible_keys: PRIMARY,two,cpid,team > > key: cpid > > key_len: 35 > > ref: const > > rows: 1 > > Extra: Using where; Using index; Using temporary; Using filesort > > *************************** 2. row *************************** > > id: 1 > > select_type: SIMPLE > > table: b > > type: eq_ref > > possible_keys: PRIMARY > > key: PRIMARY > > key_len: 10 > > ref: stats.a.proj > > rows: 1 > > Extra: Using where > > 2 rows in set (0.00 sec) > > > > I could just remove the order by altogether and perform the sort in php > > afterwards I guess but any other ideas? > > > > Thanks > > > > Phil > > > > -- > > Distributed Computing stats > > http://stats.free-dc.org > > > > > > -- > - michael dykman > - mdyk...@gmail.com > > May the Source be with you. > -- Distributed Computing stats http://stats.free-dc.org