MySQL can use indexes to sort, but not when your WHERE clause contains a
column other than the one being sorted on.

I think the MySQL manual has a good section on what 'filesort' means and
when MySQL uses it.  Basically it's selecting all the rows that meet your
WHERE clause, then running a quicksort algorithm over the results.

One thing you can do to speed up this kind of query is reducing the number
of rows it has to sort before it can select the last 10, by using a more
restrictive WHERE.  For example, I had a query very much like this that
displayed the last 50 records to be put in the database sorted by time.
Since I knew more than 50 records a day came in, I added a 'WHERE Time >'
clause to only select records from the last 24 hours.  This made a huge
difference because it was only selecting a couple hundred records instead of
a million or so before doing the sort and throwing away all but the last 50.

I don't know if that was clear or not, but what I'm trying to say is, if you
can limit the amount of data that matches the WHERE that you're going to be
throwing out anyway, do it. :)

> -----Original Message-----
> From: Brent Baisley [mailto:[EMAIL PROTECTED]

> Sorts don't use indexes, for the most part, only the search 
> part does. 
> Someone correct me if I'm wrong on that, I think I recall 
> reading it in 
> SQL for Smarties.

> On Friday, June 13, 2003, at 02:08 PM, Bruce Leidl wrote:
> 
> >
> > I'm having a problem with some very slow queries that spend a very 
> > long time in the 'Sorting result' state and I'm wondering how sorts 
> > are implemented in mysql and what I can do to optimize 
> these types of 
> > queries.
> >
> > The query looks something like this:
> >
> > SELECT col1,col2,col3 from table1 where col1 = 0 ORDER BY col2 DESC 
> > LIMIT 10;
> >
> > Both col1 and col2 have individual indexes (idx_1, idx_2)
> >
> > Running an EXPLAIN on the query gives me the following information:
> >
> > table:              table1
> > type:               ref
> > possible_keys:      idx_1
> > key:                idx_1
> > key_len:    4
> > ref:                const
> > rows:               10269
> > extra:              where used; Using filesort
> >
> > I understand that this is retrieving a lot of rows which is 
> slow, but 
> > after the rows have been retrieved shouldn't the sort execute very 
> > quickly using the index on the sorted column?  I notice that the 
> > EXPLAIN makes no mention at all of the index on the column being 
> > sorted.  What is a filesort and what are the different ways 
> that mysql 
> > can sort a result set?

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to