sql >> Database teknologi >  >> RDS >> Mysql

MySQL 5.7.5+ får første række for grupperne

Din ORDER BY i den afledte tabel ignoreres underforespørgsel i MySQL 5.7.

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

Din ydre forespørgsel har en JOIN og en GROUP BY, så den kvalificerer sig ikke til at udbrede ORDER BY, derfor ignorerer den ORDER BY.

Denne optimeringsadfærd styres af optimeringskontakten derived_merge . Du kan deaktivere 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. De brugte SELECT-sætninger har et andet antal kolonner (REDUX!!)

  2. Memcache - lagring af mysql-resultater

  3. Sjovt med (columnstore) komprimering på et meget stort bord – del 2

  4. Skinner:Ingen forbindelsespulje til ActiveRecord::Base