26.02.2009 11:51GROUP BY и ORDER BY NULL
Не все знают, что MySQL по умолчанию упорядочивает результаты запроса по полям в GROUP BY. Это значит, что возможно использование filesort и других затратных операций сортировки.
В данном запросе используется filesort:
MySQL:
-
world@localhost>EXPLAIN SELECT CountryCode, Name FROM City GROUP BY CountryCode LIMIT 10;
-
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
-
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
-
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
-
| 1 | SIMPLE | City | ALL | NULL | NULL | NULL | NULL | 4079 | USING temporary; USING filesort |
-
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
-
1 row in SET (0.00 sec)
В случае когда не важно как должен быть упорядочен результат MySQL позволяет отказаться от сортировки с помощью оператора ORDER BY NULL:
MySQL:
-
world@localhost>EXPLAIN SELECT CountryCode, Name FROM City GROUP BY CountryCode ORDER BY NULL LIMIT 10;
-
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
-
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
-
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
-
| 1 | SIMPLE | City | ALL | NULL | NULL | NULL | NULL | 4079 | USING temporary |
-
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
-
1 row in SET (0.00 sec)
В последнем случае filesort отсутствует.
Комментариев нет | Рубрики: MySQL, performance