sql >> Database >  >> RDS >> Mysql

MySQL 5.7.5+ krijgt de eerste rij voor de groepen

Uw ORDER BY in de afgeleide tabel wordt subquery genegeerd in MySQL 5.7.

Zie https://dev.mysql.com/ doc/refman/5.7/nl/afgeleide-tabel-optimalisatie.html

Uw buitenste zoekopdracht heeft een JOIN en een GROUP BY, dus het komt niet in aanmerking om de ORDER BY te verspreiden, daarom negeert het de ORDER BY.

Dit optimalisatiegedrag wordt bestuurd door de optimalisatieschakelaar derived_merge . Je kunt het uitschakelen.

Demo:

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. U weet dat u dat wilt:migreren van Oracle naar MariaDB

  2. #1075 - Onjuiste tabeldefinitie; er kan maar één autokolom zijn en deze moet als een sleutel worden gedefinieerd

  3. Plan Explorer 3.0 Webinar – Voorbeelden en vragen en antwoorden

  4. Nieuwe rij toevoegen in MYSQL vanuit door komma's gescheiden tekst in tekstvak