• unknown's avatar
    Bug #30596 GROUP BY optimization gives wrong result order · 321dd7a1
    unknown authored
      
    The optimization that uses a unique index to remove GROUP BY did not 
    ensure that the index was actually used, thus violating the ORDER BY
    that is implied by GROUP BY.
    Fixed by replacing GROUP BY with ORDER BY if the GROUP BY clause contains
    a unique index over non-nullable field(s). In case GROUP BY ... ORDER BY 
    null is used, GROUP BY is simply removed.
    
    
    mysql-test/include/mix1.inc:
      Bug#30596: Test case for InnoDB
      Here, as opposed to for MyISAM, row lookup is done using index 
      whenever the index covers the group list.
    mysql-test/r/distinct.result:
      Bug#30596: Changed test case. 
      Prior to Bug#16458, These queries use temp table and filesort. The
      bug was that they used a temp table. However, that patch removed
      filesort also, in which case we can no longer gurantee correct ordering.
    mysql-test/r/group_by.result:
      Bug#30596: Correct result
      The test case for IGNORE INDEX FOR GROUP BY gets degraded performance 
      (unneccesary filesort). This is due to Bug#30665, which will be fixed separately.
    mysql-test/r/innodb_mysql.result:
      Bug#30596: Test result
    mysql-test/t/group_by.test:
      Bug#30596: Test case
    sql/sql_select.cc:
      Bug#30596: The fix: 
      - replace GROUP BY with ORDER BY unless ORDER BY [NULL|<constant>]
      - make sure to use the keys for GROUP BY in this ORDER BY.
    321dd7a1
group_by.result 43.2 KB