Bug #62372 | Wrong query results with SQL_CALC_FOUND_ROWS, GROUP BY, LIMIT and Using index | ||
---|---|---|---|
Submitted: | 7 Sep 2011 11:48 | Modified: | 11 Feb 2018 14:17 |
Reporter: | Mateusz Kijowski | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
Version: | 5.5.15, 5.5.17 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | regression |
[7 Sep 2011 11:48]
Mateusz Kijowski
[7 Sep 2011 11:52]
Mateusz Kijowski
The query returns valid result when run without SQL_CALC_FOUND_ROWS: > SELECT `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 2; +-----+ | kat | +-----+ | 101 | | 102 | +-----+ 2 rows in set (0.00 sec) Confirmed on 5.1, but works properly on 5.0.32 from Debian etch.
[7 Sep 2011 16:19]
Valeriy Kravchuk
Thank you for the bug report. Verified with current mysql-5.5 from bzr on Mac OS X: macbook-pro:5.5 openxs$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.5.17 Source distribution Copyright (c) 2000, 2011, 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> DROP TABLE IF EXISTS `buggy_sm`; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE `buggy_sm` ( -> `id` int(11) NOT NULL AUTO_INCREMENT, -> `int1` int(11) NOT NULL DEFAULT '0', -> `kat` int(11) NOT NULL DEFAULT '0', -> `date_from` date NOT NULL DEFAULT '0000-00-00', -> `date_to` date NOT NULL DEFAULT '0000-00-00', -> `dict` tinyint(1) NOT NULL DEFAULT '0', -> PRIMARY KEY (`id`), -> KEY `dict` (`dict`), -> KEY `multi` (`kat`,`int1`,`date_from`,`date_to`,`dict`) -> ) ENGINE=MyISAM AUTO_INCREMENT=32700 DEFAULT CHARSET=latin2; Query OK, 0 rows affected (0.24 sec) mysql> INSERT INTO `buggy_sm` VALUES -> (1,21,101,'0000-00-00','2006-09-26',0), -> (79,18,102,'0000-00-00','2006-10-23',0), -> (101,7153,201,'0000-00-00','2006-09-08',0), -> (4362,10365,324,'0000-00-00','2007-05-29',0), -> (19522,892,329,'0000-00-00','2008-11-15',0), -> (4382,4268,503,'0000-00-00','2006-09-05',1), -> (5088,728,504,'0000-00-00','2006-09-05',0), -> (6110,3798,505,'0000-00-00','2008-09-05',0), -> (7315,6205,506,'0000-00-00','2008-09-05',1), -> (8394,6732,507,'0000-00-00','2008-09-05',0), -> (8593,6954,508,'2006-09-13','2008-09-08',0), -> (8708,9625,509,'2006-09-10','2008-09-05',1), -> (9179,14811,510,'0000-00-00','2006-09-05',0), -> (13076,3334,511,'2006-10-02','2008-09-27',1), -> (13086,15319,512,'2006-09-15','2008-09-10',0), -> (13216,3479,513,'0000-00-00','2008-09-05',1), -> (13783,4403,514,'0000-00-00','2006-09-06',1), -> (29337,11102,516,'0000-00-00','2006-09-09',1), -> (29857,8606,518,'0000-00-00','2008-09-08',0), -> (29886,8267,520,'0000-00-00','2006-12-29',0), -> (13866,2984,601,'0000-00-00','2006-09-08',0), -> (14082,17253,602,'2006-09-13','2008-09-08',0), -> (14372,18772,604,'0000-00-00','2006-09-05',0), -> (14930,8086,605,'0000-00-00','2006-09-06',0), -> (14974,2842,606,'0000-00-00','2006-09-06',0), -> (29031,719,610,'0000-00-00','2006-09-11',0), -> (32699,18916,611,'2006-09-17','2008-09-12',0), -> (3917,4374,615,'0000-00-00','2006-09-05',0), -> (32366,3300,633,'2007-02-01','2009-01-27',0), -> (15054,13146,801,'0000-00-00','2006-09-07',0); Query OK, 30 rows affected (0.14 sec) Records: 30 Duplicates: 0 Warnings: 0 mysql> SELECT SQL_CALC_FOUND_ROWS `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 2; +-----+ | kat | +-----+ | 801 | +-----+ 1 row in set (0.15 sec) mysql> SELECT SQL_CALC_FOUND_ROWS `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 4; +-----+ | kat | +-----+ | 101 | | 102 | | 201 | | 324 | +-----+ 4 rows in set (0.01 sec) mysql> SELECT SQL_CALC_FOUND_ROWS `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 2; +-----+ | kat | +-----+ | 801 | +-----+ 1 row in set (0.01 sec) mysql> explain SELECT SQL_CALC_FOUND_ROWS `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 2; +----+-------------+----------+-------+---------------+-------+---------+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+-------+---------------+-------+---------+------+------+--------------------------+ | 1 | SIMPLE | buggy_sm | index | dict | multi | 15 | NULL | 2 | Using where; Using index | +----+-------------+----------+-------+---------------+-------+---------+------+------+--------------------------+ 1 row in set (0.04 sec) mysql> explain SELECT SQL_CALC_FOUND_ROWS `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 4; +----+-------------+----------+------+---------------+------+---------+-------+------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+------+---------------+------+---------+-------+------+----------------------------------------------+ | 1 | SIMPLE | buggy_sm | ref | dict | dict | 1 | const | 22 | Using where; Using temporary; Using filesort | +----+-------------+----------+------+---------------+------+---------+-------+------+----------------------------------------------+ 1 row in set (0.00 sec) mysql> explain SELECT `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 4; +----+-------------+----------+------+---------------+------+---------+-------+------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+------+---------------+------+---------+-------+------+----------------------------------------------+ | 1 | SIMPLE | buggy_sm | ref | dict | dict | 1 | const | 22 | Using where; Using temporary; Using filesort | +----+-------------+----------+------+---------------+------+---------+-------+------+----------------------------------------------+ 1 row in set (0.00 sec) mysql> explain SELECT `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 2; +----+-------------+----------+-------+---------------+-------+---------+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+-------+---------------+-------+---------+------+------+--------------------------+ | 1 | SIMPLE | buggy_sm | index | dict | multi | 15 | NULL | 2 | Using where; Using index | +----+-------------+----------+-------+---------------+-------+---------+------+------+--------------------------+ 1 row in set (0.00 sec) mysql> SELECT `kat` FROM `buggy_sm` WHERE dict=0 GROUP BY `kat` LIMIT 2;+-----+ | kat | +-----+ | 101 | | 102 | +-----+ 2 rows in set (0.00 sec)
[3 Mar 2016 13:16]
Sveta Smirnova
Not repeatable with version 5.7
[11 Feb 2018 14:17]
Roy Lyseng
Posted by developer: Fixed in 5.6.40 and up.