Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL 5.7.5+ получава първия ред за групите

Вашият ORDER BY в извлечената таблица подзаявката се игнорира в MySQL 5.7.

Вижте https://dev.mysql.com/ doc/refman/5.7/en/derived-table-optimization.html

Вашата външна заявка има JOIN и GROUP BY, така че не отговаря на условията за разпространение на ORDER BY, поради което игнорира ORDER BY.

Това поведение на оптимизатора се контролира от превключвателя на оптимизатора derived_merge . Можете да го деактивирате.

Демо:

mysql [localhost] {msandbox} (test) > select @@version;
+-----------+
| @@version |
+-----------+
| 5.7.21    |
+-----------+

mysql [localhost] {msandbox} (test) > SELECT     columnPrimaryKey,     column1,     column2,     column3 FROM     (SELECT         columnPrimaryKey,         column1,         column2,         column3     FROM testTable     ORDER BY column2 ) AS tbl GROUP BY column3;
+------------------+----------------+---------+---------+
| columnPrimaryKey | column1        | column2 | column3 |
+------------------+----------------+---------+---------+
|                1 | Some Name 8-4  |       4 |       8 |
|                6 | Some Name 9-1  |       1 |       9 |
|                8 | Some Name 10-2 |       2 |      10 |
+------------------+----------------+---------+---------+

mysql [localhost] {msandbox} (test) > set optimizer_switch = 'derived_merge=off';
Query OK, 0 rows affected (0.00 sec)

mysql [localhost] {msandbox} (test) > SELECT     columnPrimaryKey,     column1,     column2,     column3 FROM     (SELECT         columnPrimaryKey,         column1,         column2,         column3     FROM testTable     ORDER BY column2 ) AS tbl GROUP BY column3;
+------------------+----------------+---------+---------+
| columnPrimaryKey | column1        | column2 | column3 |
+------------------+----------------+---------+---------+
|                5 | Some Name 8-1  |       1 |       8 |
|                6 | Some Name 9-1  |       1 |       9 |
|                8 | Some Name 10-2 |       2 |      10 |
+------------------+----------------+---------+---------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разрешите Обща грешка:2006 MySQL сървърът е изчезнал

  2. Тригер за проследяване на промените в MySQL база данни

  3. как да изберете ред, където една от няколко колони е равна на определена стойност?

  4. изтриване на ред с ajax функция и php

  5. SQL производителност при търсене на дълги низове