You neglected to say how much memory your system has.
I am a newbie, but one of the first things I learned about mysql, is 
that it needs a lot of memory to handle any kind of load. If you do 
not have at least 500meg, add some.

On 26 Feb 2001, at 13:22, Joseph Bueno wrote:

> Hi list,
> 
> I have some trouble trying to optimise SELECT queries
> that use ORDER BY condition.
> 
> I have found out that each time the server is busy
> (100% CPU usage), it is due to queries that show
> up in 'mysqladmin processlist' report with 'Sorting result'
> state in 'Command' column.
> 
> I am trying to optimise it by adding proper indexes so
> that these sorts could be avoided.
> 
> According to MySQL manual (12.4 How MySQL Uses Indexes),
> 
> SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3;
> SELECT * FROM foo WHERE key_part1=const ORDER BY key_part2;
> 
> should use an index to avoid sorting
> (second SELECT is actually a GROUP BY in the manual but I
> assume it applies also to ORDER BY since the manual makes
> no distinction between them).
> 
> In my case, sort is still used.
> 
> My table looks like:
> 
> CREATE TABLE pa (
>   region int(11) NOT NULL default '0',
>   code int(11) NOT NULL default '0',
>   pseudo varchar(20) NOT NULL default '',
>   date_depose int(11) NOT NULL default '0',
>   nom varchar(80) NOT NULL default '',
>   pays int(11) NOT NULL default '0',
>   commentaire text NOT NULL,
>   PRIMARY KEY (code),
>   UNIQUE KEY idx1(pseudo),
>   KEY date_depose(date_depose),
>   KEY pays_date_depose(pays,date_depose)
> ) TYPE=MyISAM;
> 
> and here are some EXPLAIN:
> 
> mysql> explain select code from pa order by date_depose desc;
> +-------+------+---------------+------+---------+------+--------+-----
> +-----------+
> | table | type | possible_keys | key  | key_len | ref  | rows   |
> Extra          |
> +-------+------+---------------+------+---------+------+--------+-----
> -----------+ | pa    | ALL  | NULL          | NULL |    NULL | NULL |
> 151826 | Using filesort |
> +-------+------+---------------+------+---------+------+--------+-----
> -----------+ 1 row in set (0.00 sec)
> 
> mysql> explain select code from pa order by date_depose desc limit
> 2000;
> +-------+-------+---------------+-------------+---------+------+------
> --+-------+ | table | type  | possible_keys | key         | key_len |
> ref  | rows   | Extra |
> +-------+-------+---------------+-------------+---------+------+------
> --+-------+ | pa    | index | NULL          | date_depose |       4 |
> NULL | 151826 |       |
> +-------+-------+---------------+-------------+---------+------+------
> --+-------+ 1 row in set (0.00 sec)
> 
> It seems that the index is used in second case only; may be because of
> LIMIT option; but this is NOT what is described in the manual.
> 
> mysql> explain select code from pa where pays=2 order by date_depose
> desc;
> +-------+------+------------------+------------------+---------+------
> -+------+----------------------------+ | table | type | possible_keys 
>   | key              | key_len | ref   | rows | Extra                 
>     |
> +-------+------+------------------+------------------+---------+------
> -+------+----------------------------+ | pa    | ref  |
> pays_date_depose | pays_date_depose |       4 | const | 1178 | where
> used; Using filesort |
> +-------+------+------------------+------------------+---------+------
> -+------+----------------------------+ 1 row in set (0.00 sec)
> 
> 
> mysql> explain select code from pa where pays=2 order by date_depose
> desc limit 100;
> +-------+------+------------------+------------------+---------+------
> -+------+----------------------------+ | table | type | possible_keys 
>   | key              | key_len | ref   | rows | Extra                 
>     |
> +-------+------+------------------+------------------+---------+------
> -+------+----------------------------+ | pa    | ref  |
> pays_date_depose | pays_date_depose |       4 | const | 1178 | where
> used; Using filesort |
> +-------+------+------------------+------------------+---------+------
> -+------+----------------------------+ 1 row in set (0.01 sec)
> 
> In this case, the index is NEVER used to avoid sorting even when LIMIT
> option is restricting the result set.
> 
> I am currently running MySQL version 3.23.30-gamma, but I have
> checked release notes for more recent versions I have not found
> anything related to this.
> 
> What can I do to make these queries less CPU hungry ?
> 
> Thanks
> --
> Joseph Bueno
> NetClub/Trader.com
> 
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
> 
> To request this thread, e-mail <[EMAIL PROTECTED]> To
> unsubscribe, e-mail
> <[EMAIL PROTECTED]> Trouble
> unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> 


John Jensen
520 Goshawk Court
Bakersfield, CA 93309
661-833-2858

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to