回答
它的性能;在GROUP BY
子句之後添加ORDER BY NULL
將使您的查詢更快。
的解釋,從manual:
默認情況下,MySQL的,如果你在查詢中指定
ORDER BY col1, col2, ...
以及排序的所有GROUP 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;
This article描寫了作者通過利用這一招,完全與EXPLAIN
輸出的相關部分成功優化慢速查詢。
此鏈接
http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
說它加快使用GROUP BY查詢:
如果查詢包括GROUP BY但你想要避免排序結果的開銷,你可以通過指定ORDER BY NULL來禁止排序。
有些開發人員使用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技術現在是無用的。
【官方文檔( http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html)也表示:「** Note **依賴於MySQL 5.6中的隱式」GROUP BY「排序已被棄用。」 – Pang 2014-09-09 07:39:54
-1;這個答案是錯誤的。 *依賴隱式排序已被棄用,但它仍然是MySQL的一部分,因此ORDER BY NULL仍然有用。你鏈接到的文章甚至說*沒有任何變化*。 – 2014-09-25 15:56:01
我soory但我可以看到性能比較:
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)
默認情況下,MySQL對所有GROUP BY col1,col2,...查詢進行排序,就像您在查詢中指定ORDER BY col1,col2 ...一樣。如果你包含一個包含相同列列表的明確的ORDER BY子句,MySQL會優化它,而不會有任何速度損失,儘管排序仍然存在。如果查詢包含GROUP BY,但您希望避免排序結果的開銷,則可以通過指定ORDER BY NULL來禁止排序。 http://dev.mysql.com/doc/refman/5.0/zh/order-by-optimization.html – Mahoor13 2014-11-09 06:34:28
- 1. mysql order by,null first,and DESC after
- 2. GROUP BY PRIORITIZE NULL?
- 3. group by by by by mysql
- 4. Mysql group by by by by?
- 5. Mysql Group by time by mutilple condition
- 6. SQL Server GROUP BY NULL
- 7. 用LEFT JOIN和GROUP BY COUNT(*)在MySQL中包含NULL
- 8. MYSQL GROUP BY/ORDER BY confusion
- 9. mysql group by confusion
- 10. MySQL - IN中的ORDER BY值()
- 11. EntityFramework中的MySql ORDER BY FIELD()
- 12. GROUP BY子句中的MySQL
- 13. Union MYSQL中的GROUP BY
- 14. MySQL中的NULL列
- 15. 奇怪的MySQL GROUP BY/ORDER BY行爲
- 16. AJAX response = null by jquery v1.6.2
- 17. SQL Group by Max Date Including Null
- 18. MySQL ORDER BY係數?
- 19. 如何by子句的MySQL
- 20. MySQL的 - GROUP BY減慢
- 21. MySQL的GROUP BY年怪事
- 22. Mysql COUNT,GROUP BY和ORDER BY
- 23. MySQL ORDER BY,GROUP BY內JOIN
- 24. mysql order by tag occurrence group by
- 25. Mysql組by by order by not working
- 26. MySQL,GROUP BY中的過濾器
- 27. 在UNION中使用Order By NULL
- 28. Mysql的ORDER BY FIELD()
- 29. MySQL的 - GROUP BY GROUP_CONCAT
- 30. MySQL的GROUP BY量
如果您有任何疑問例如張貼 – 2011-03-08 11:38:33
如果你不想被任何東西訂購只是by子句省略順序完全 – cusimar9 2011-03-08 11:39:02