sql >> Databasteknik >  >> RDS >> Mysql

MySQL 5.7.5+ får första raden för grupperna

Din ORDER BY i den härledda tabellen ignoreras underfrågan i MySQL 5.7.

Se https://dev.mysql.com/ doc/refman/5.7/en/derived-table-optimization.html

Din yttre fråga har en JOIN och en GROUP BY, så den kvalificerar sig inte för att sprida ORDER BY, därför ignorerar den ORDER BY.

Detta optimeringsbeteende styrs av optimeringsväljaren derived_merge . Du kan inaktivera det.

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. php-utgång från mysql till html-tabell

  2. Ändra startvärdet för Django AutoField

  3. MySQL:Hur kan jag få tidsstämpeln för den senaste infogningen i databasen

  4. Cloud Vendor Deep-Dive:PostgreSQL på Microsoft Azure