Respuesta
Es por rendimiento; agregar ORDER BY NULL
después de una cláusula GROUP BY
hará que su consulta sea más rápida.
una explicación, desde el manual:
Por defecto, MySQL ordena todas
GROUP BY col1, col2, ...
consultas, si ha especificadoORDER BY col1, col2, ...
en la consulta también. Si incluye una cláusula explícitaORDER BY
que contiene la misma lista de columnas, MySQL la optimiza sin ninguna penalización de velocidad, aunque la clasificación todavía se produce. Si una consulta incluyeGROUP BY
pero desea evitar la sobrecarga de ordenar el resultado, puede suprimir la ordenación especificandoORDER BY NULL
. Por ejemplo:INSERT INTO foo SELECT a, COUNT(*) FROM bar GROUP BY a ORDER BY NULL;
This article describe el autor optimizar con éxito una consulta lenta mediante la explotación de este truco, completa con las partes pertinentes de la salida EXPLAIN
.
Este enlace
http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
Dice que acelera las consultas que utilizan GROUP BY:
Si una consulta incluye GROUP BY, pero desea evitar la sobrecarga de clasificar el resultado, puede suprimir la ordenación especificando ORDER BY NULL.
Algunos desarrolladores usaron ORDER BY NULL para aumentar la velocidad de las consultas utilizando la cláusula GROUP BY.
La razón es que antes de MySQL 5.6 había un tipo implícito de los datos al llamar a la cláusula GROUP BY. Por lo tanto, agregar ORDER BY NULL desactivaba este tipo implícito y, en consecuencia, hacía que la consulta se ejecutara más rápido.
Desde MySQL 5.6, la clasificación implícita de la cláusula GROUP BY está en desuso http://www.tocker.ca/2013/10/21/heads-up-implicit-sorting-by-group-by-is-deprecated-in-mysql-5-6.html
Por lo tanto el ORDER BY técnica NULL es ahora inútil.
[doc Oficial] (http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html) también dice: "** Nota ** Confiar en la clasificación implícita de' GROUP BY' en MySQL 5.6 está en desuso. " – Pang
-1; esta respuesta es incorrecta * Confiar * en la ordenación implícita está en desuso, pero todavía es parte de MySQL, por lo que ORDER BY NULL aún cumple una función. El mismo artículo con el que enlazas incluso dice que * nada ha cambiado aún *. –
Soy soory pero que se puede ver del perfomance:
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)
Por defecto, MySQL ordena todas las consultas GROUP BY col1, col2, ... como si especificara ORDER BY col1, col2, ... en la consulta también. Si incluye una cláusula ORDER BY explícita que contiene la misma lista de columnas, MySQL la optimiza sin ninguna penalización de velocidad, aunque la clasificación todavía se produce.Si una consulta incluye GROUP BY pero desea evitar la sobrecarga de ordenar el resultado, puede suprimir la ordenación especificando ORDER BY NULL. http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html – Mahoor13
- 1. MySQL ORDER BY Edición CASO
- 2. MySQL Group By Hours
- 3. MySQL ORDER BY COUNT()?
- 4. ¿Qué significa "ORDER BY (SELECT NULL)"?
- 5. Índice de MySQL para Group By/Order By
- 6. MySQL Group By y HAVING
- 7. mysql null a 0
- 8. MySQL LOAD_FILE devuelva NULL
- 9. ¿Cómo peso 'ORDER BY' en mysql?
- 10. ORDER BY y = (igual) en MYSQL
- 11. MySQL Query order por if null
- 12. MySQL: Total GROUP BY WITH ROLLUP curiosidad
- 13. Consulta de MySQL, MAX() + GROUP BY
- 14. Optimización de ORDER BY Consulta en la tabla grande MySQL
- 15. mysql min ignora null - necesidad solución/ajustar
- 16. Establecer valor en NULL en MySQL
- 17. MySQL - RECUENTO condicional con GROUP BY
- 18. MySQL carga valores NULL de datos CSV
- 19. Entero MySQL 0 vs NULL
- 20. MySQL: NULL Encasillamiento a 0
- 21. Zend: Cómo insertar valores NULL en MySQL
- 22. MySQL Cast NULL en entero 0
- 23. Las claves externas y NULL en MySQL
- 24. MySQL - ORDER BY valores dentro de()
- 25. MySQL - utilizando GROUP BY y DESC
- 26. MySQL COUNT(), SUM() y GROUP BY
- 27. PHP MySQL Search And Order By Relevancy
- 28. MySQL GROUP BY fecha al usar datetime
- 29. MySQL Group by ID y Latest Datetime
- 30. MySQL no mediante el índice de ORDER BY
si cualquier consulta de ejemplo que lo ponga –
Si no quiere pedir por nada basta con omitir la cláusula ORDER BY completo – cusimar9