Подтвердить что ты не робот

ORDER BY NULL в MySQL

Что такое ORDER BY NULL в MySQL?

Уменьшает ли скорость запроса?

4b9b3361

Ответ 1

Это для производительности; добавив ORDER BY NULL после того, как предложение GROUP BY сделает ваш запрос быстрее.

Объяснение из руководства :

По умолчанию MySQL сортирует все GROUP BY col1, col2, ... запросы, как если бы вы указали ORDER BY col1, col2, ... в запросе. Если вы включаете явное предложение ORDER BY, которое содержит тот же список столбцов, MySQL оптимизирует его без каких-либо ограничений скорости, хотя сортировка по-прежнему происходит. Если запрос включает GROUP BY, но вы хотите избежать накладных расходов на сортировку результата, вы можете подавить сортировку, указав ORDER BY NULL. Например:

INSERT INTO foo
SELECT a, COUNT(*) FROM bar GROUP BY a ORDER BY NULL;

В этой статье автор описывает успешную оптимизацию медленного запроса, используя этот трюк, в комплекте с соответствующими частями вывода EXPLAIN.

Ответ 2

Эта ссылка

http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html

Говорит, что это ускоряет запросы, которые используют GROUP BY:

Если запрос включает GROUP BY, но вы хотите избежать накладных расходов на сортировку результата, вы можете запретить сортировку, указав ORDER BY NULL.

Ответ 3

Некоторые разработчики использовали ORDER BY NULL для увеличения скорости запросов с помощью предложения GROUP BY.

Причина в том, что до MySQL 5.6 при вызове предложения GROUP BY существовал неявный вид данных. Таким образом, добавление ORDER BY NULL приводило к инактивации этого неявного типа и, следовательно, ускорение выполнения запроса.

Начиная с MySQL 5.6, неявная сортировка предложения GROUP BY DEPRECATED http://www.tocker.ca/2013/10/21/heads-up-implicit-sorting-by-group-by-is-deprecated-in-mysql-5-6.html

Поэтому метод ORDER BY NULL теперь бесполезен.

Ответ 4

Я созерцаю, но вижу производительность:

mysql> SELECT *,COUNT(status) FROM big_table GROUP BY status;
+----------------+----------------------------------+--------+---------------+
| id             | hash                             | status | COUNT(status) |
+----------------+----------------------------------+--------+---------------+
| 14149924276950 | 20e2873f1026c867a1044681895130b8 |      0 |        268044 |
| 14149924273884 | 889dc604799c563783396a3cb2c688a5 |      1 |        277474 |
|  1414992427397 | 4e1769e2e64e737f37b918b834f8f696 |      2 |        279815 |
| 14149924277490 | 539b71f083fc95a93d0d4b904a56ebb2 |      3 |        290216 |
| 14149924274097 | ec694b8fc1786ea4f612dbe55d351715 |      4 |        272748 |
| 14149924272735 | 64c3d1077c3ed3ee02398896376327aa |      5 |        280785 |
| 14149924278670 | 05c143790ba4ecf73fc3be78d095c067 |      6 |        295417 |
| 14149924271189 | 79bcafe38074703a49fb372c95e3676a |      7 |        310937 |
| 14149924273279 | 29069b0fe511c160e95f98e2e2b770ac |      8 |        279338 |
| 14149924277367 | 2e72091679aa6e3d64ed3c407ceeb6d4 |      9 |        281226 |
+----------------+----------------------------------+--------+---------------+
10 rows in set (44.43 sec)

mysql> SELECT *,COUNT(status) FROM big_table GROUP BY status ORDER BY NULL;
+----------------+----------------------------------+--------+---------------+
| id             | hash                             | status | COUNT(status) |
+----------------+----------------------------------+--------+---------------+
| 14149924272735 | 64c3d1077c3ed3ee02398896376327aa |      5 |        280785 |
| 14149924277367 | 2e72091679aa6e3d64ed3c407ceeb6d4 |      9 |        281226 |
|  1414992427397 | 4e1769e2e64e737f37b918b834f8f696 |      2 |        279815 |
| 14149924278670 | 05c143790ba4ecf73fc3be78d095c067 |      6 |        295417 |
| 14149924274097 | ec694b8fc1786ea4f612dbe55d351715 |      4 |        272748 |
| 14149924271189 | 79bcafe38074703a49fb372c95e3676a |      7 |        310937 |
| 14149924276950 | 20e2873f1026c867a1044681895130b8 |      0 |        268044 |
| 14149924273279 | 29069b0fe511c160e95f98e2e2b770ac |      8 |        279338 |
| 14149924277490 | 539b71f083fc95a93d0d4b904a56ebb2 |      3 |        290216 |
| 14149924273884 | 889dc604799c563783396a3cb2c688a5 |      1 |        277474 |
+----------------+----------------------------------+--------+---------------+
10 rows in set (44.13 sec)