On 4/20/06, Adam Wolff <[EMAIL PROTECTED]> wrote:

> How can I optimize the case where I filter on one key but sort on another?
> This is fast:
>    SELECT * FROM contacts WHERE fullname LIKE "j%" ORDER BY fullname LIMIT 10;
>
> But this is slow:
>    SELECT * FROM contacts WHERE fullname LIKE "j%" ORDER BY email LIMIT 10;
>
> EXPLAIN tells me that the optimizer is using filesort for the second
> but not the first (which makes sense.)

Such things are pretty hard to optimize. If you have large number of
rows, forcing usage of (email) index for this query might help, as
engine will scan as many rows as required for satisfying limit. Also
having (email, fullname(1)) index might save a few cycles.

> * Question 2:
> Why does introducing an extra WHERE clause make things slower?
> If I do this:
>    SELECT * FROM contacts WHERE fullname LIKE "j%" AND user_id=1
>    ORDER BY fullname LIMIT 10;

Probably because the engine is not using (fullname) index for this
query - optimizer sees 'const' ref for user_id, retrieves all rows
that have user_id=1 and then filters/sorts them all.

--
Alexey Polyakov

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

Reply via email to