Bug #99931 | Aggregate group by returns incorrect result when loose index scan is used | ||
---|---|---|---|
Submitted: | 18 Jun 2020 19:41 | Modified: | 19 Jun 2020 6:56 |
Reporter: | Bart Dubelaar | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S2 (Serious) |
Version: | 8.0.12, 8.0.18 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[18 Jun 2020 19:41]
Bart Dubelaar
[19 Jun 2020 2:38]
MySQL Verification Team
Thank you for the bug report. Please when reporting bugs use the latest released version. Not repeatable with current source server, so already fixed: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.22 Source distribution BUILT: 2020-JUN-13 Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 8.0 > use www; Database changed mysql 8.0 > CREATE TABLE `test_table` ( -> `id` int(1) NOT NULL, -> `aggregation` char(1) NOT NULL, -> `type` int(1) NOT NULL, -> `time` datetime NOT NULL -> ) ENGINE=InnoDB; Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql 8.0 > INSERT INTO `test_table` (`id`, `aggregation`, `type`, `time`) VALUES -> (1, 'A', 1, '2020-05-21 00:00:00'), -> (6, 'A', 1, '2020-05-22 00:00:00'), -> (2, 'A', 2, '2020-05-20 00:00:00'), -> (3, 'B', 2, '2020-05-19 00:00:00'), -> (4, 'B', 2, '2020-05-18 00:00:00'), -> (5, 'B', 2, '2020-05-17 00:00:00'); Query OK, 6 rows affected (0.01 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql 8.0 > ALTER TABLE `test_table` -> ADD PRIMARY KEY (`id`), -> ADD KEY `aggregation_type_time` (`aggregation`,`type`,`time`) -> ; Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql 8.0 > SELECT aggregation, MAX(`time`) AS lastlog FROM test_table -> FORCE INDEX (aggregation_type_time) WHERE type=2 GROUP BY aggregation; +-------------+---------------------+ | aggregation | lastlog | +-------------+---------------------+ | A | 2020-05-20 00:00:00 | | B | 2020-05-19 00:00:00 | +-------------+---------------------+ 2 rows in set (0.00 sec) mysql 8.0 > SELECT aggregation, MAX(`time`) AS lastlog FROM test_table -> IGNORE INDEX (aggregation_type_time) WHERE type=2 GROUP BY aggregation; +-------------+---------------------+ | aggregation | lastlog | +-------------+---------------------+ | A | 2020-05-20 00:00:00 | | B | 2020-05-19 00:00:00 | +-------------+---------------------+ 2 rows in set (0.00 sec) mysql 8.0 >
[19 Jun 2020 6:56]
Bart Dubelaar
Thanks for the response. Understandable. I'm a bit worried about regression though, as I could not find a clearly related bug fix in the change log of 8.0.19. So therefore I filed it. At least it may be helpful for future reference in case regression occurs.