26.02.2009 11:51GROUP BY и ORDER BY NULL

Не все знают, что MySQL по умолчанию упорядочивает результаты запроса по полям в GROUP BY. Это значит, что возможно использование filesort и других затратных операций сортировки.

В данном запросе используется filesort:

MySQL:
  1. world@localhost>EXPLAIN SELECT CountryCode, Name FROM City GROUP BY CountryCode LIMIT 10;
  2. +----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
  3. | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                           |
  4. +----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
  5. 1 | SIMPLE      | City  | ALL  | NULL          | NULL | NULL    | NULL | 4079 | USING temporary; USING filesort |
  6. +----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
  7. 1 row in SET (0.00 sec)


В случае когда не важно как должен быть упорядочен результат MySQL позволяет отказаться от сортировки с помощью оператора ORDER BY NULL:

MySQL:
  1. world@localhost>EXPLAIN SELECT CountryCode, Name FROM City GROUP BY CountryCode ORDER BY NULL LIMIT 10;
  2. +----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
  3. | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra           |
  4. +----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
  5. 1 | SIMPLE      | City  | ALL  | NULL          | NULL | NULL    | NULL | 4079 | USING temporary |
  6. +----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
  7. 1 row in SET (0.00 sec)

В последнем случае filesort отсутствует.

Похожие записи:

Комментариев нет | Рубрики: MySQL, performance

Post Your Comment

Немного о себе




Комментарий

*