At 21:07 -0500 10/2/03, Brad Teale wrote:
Hi All,

I asked earlier about a query being slow, possibly due to MySQL 'Using
temporary; Using filesort' when processing the query.  I have done some
testing, and it appears that no matter what data set is used, MySQL always
performs a select with a 'grant by' clause using the temporary and filesort
methods.  The only time I could force MySQL into not using these methods
happened when a did a goup by on a column that absolutely contained the same
information.  Is this the standard behavior?  Is there anyway to get around
this?  Is there a MySQL variable I can tweak?

Try adding ORDER BY NULL to suppress the implicit sorting that GROUP BY does in MySQL.

Of course, that means your results won't be sorted.  If you really want
them sorted, you might try indexing modelhr, the column you're grouping
by.  You might try indexing it anyway, in fact.  That may give you quicker
grouping.



My example:
mysql> desc foo;
+----------+--------------+------+-----+------------+-------+
| Field    | Type         | Null | Key | Default    | Extra |
+----------+--------------+------+-----+------------+-------+
| stn      | char(4)      | YES  | MUL | NULL       |       |
| modelhr  | int(2)       | YES  |     | NULL       |       |
| f_temp   | decimal(6,2) | YES  |     | NULL       |       |
| m_temp   | decimal(6,2) | YES  |     | NULL       |       |
| yearmoda | date         |      |     | 0000-00-00 |       |
+----------+--------------+------+-----+------------+-------+
5 rows in set (0.00 sec)

mysql> select * from foo;
+------+---------+--------+--------+------------+
| stn  | modelhr | f_temp | m_temp | yearmoda   |
+------+---------+--------+--------+------------+
| KHOU |       6 |  90.00 |  89.60 | 2003-06-01 |
| KHOU |       6 |  76.00 |  71.60 | 2003-06-01 |
| KHOU |       6 |  75.00 |  73.40 | 2003-06-01 |
| KHOU |       6 |  88.00 |  87.80 | 2003-06-01 |
+------+---------+--------+--------+------------+
4 rows in set (0.01 sec)

mysql> explain select stn, modelhr, m_temp from foo group by modelhr;
+-------+------+---------------+------+---------+------+------+-------------
--------------------+
| table | type | possible_keys | key  | key_len | ref  | rows | Extra
|
+-------+------+---------------+------+---------+------+------+-------------
--------------------+
| foo   | ALL  | NULL          | NULL |    NULL | NULL |  120 | Using
temporary; Using filesort |
+-------+------+---------------+------+---------+------+------+-------------
--------------------+
1 row in set (0.01 sec)

mysql> explain select stn, modelhr, m_temp from foo where stn='KHOU' and
yearmoda = '2003-06-02' group by modelhr;
+-------+------+---------------+------+---------+------+------+-------------
---------------------------------+
| table | type | possible_keys | key  | key_len | ref  | rows | Extra
|
+-------+------+---------------+------+---------+------+------+-------------
---------------------------------+
| foo   | ALL  | stn,stn_2     | NULL |    NULL | NULL |   90 | Using where;
Using temporary; Using filesort |
+-------+------+---------------+------+---------+------+------+-------------
---------------------------------+
1 row in set (0.05 sec)


--
Paul DuBois, Senior Technical Writer
Madison, Wisconsin, USA
MySQL AB, www.mysql.com

Are you MySQL certified? http://www.mysql.com/certification/


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



Reply via email to