Bug #45219 | Crash on SELECT DISTINCT query containing a LEFT JOIN in subquery | ||
---|---|---|---|
Submitted: | 31 May 2009 17:51 | Modified: | 13 Nov 2009 11:52 |
Reporter: | Patrick Crews | Email Updates: | |
Status: | Duplicate | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S3 (Non-critical) |
Version: | 6.0 | OS: | Any |
Assigned to: | Assigned Account | CPU Architecture: | Any |
Tags: | optimizer_switch, outerjoin, semijoin, subquery |
[31 May 2009 17:51]
Patrick Crews
[31 May 2009 17:53]
Patrick Crews
RQG Crash output including data from master.log files.
Attachment: azalea_rqg_crash_output.txt (text/plain), 8.32 KiB.
[16 Jun 2009 14:54]
Patrick Crews
Simplified query: SELECT `varchar_nokey` FROM B WHERE ( `pk` , `pk` ) IN ( SELECT PARENT1 .`int_nokey` , PARENT1 .`pk` FROM BB PARENT1 LEFT JOIN BB PARENT2 ON PARENT2 .`varchar_nokey` WHERE PARENT1 .`pk` = 4 ); Still working on repeating this bug to produce a proper, RQG-generated test case.
[23 Jul 2009 16:12]
Patrick Crews
NOTE: This crash is caused by having the optimizer_switch value semijoin=on (turning this to off eliminates the crash) /*!50400 SET SESSION optimizer_switch = 'firstmatch=on,index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,loosescan=on,materialization=on,semijoin=on' */; /*!50400 SET SESSION optimizer_use_mrr = 'disable' */; /*!50400 SET SESSION engine_condition_pushdown = 0 */; /*!50400 SET SESSION join_cache_level = 0 */; # Begin test case for query 0 --disable_warnings DROP TABLE IF EXISTS CC, C, BB; --enable_warnings CREATE TABLE `CC` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `int_nokey` int(11) NOT NULL, `datetime_key` datetime NOT NULL, `varchar_key` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1; INSERT INTO `CC` VALUES (10,0,'2006-07-07 07:26:28','q'),(11,5,'2002-09-23 00:00:00','m'),(12,7,'0000-00-00 00:00:00','j'),(13,1,'2006-06-07 00:00:00','z'),(14,8,'2000-09-16 12:15:34','a'),(15,2,'2007-08-05 15:47:52',''),(16,1,'0000-00-00 00:00:00','e'),(17,8,'2005-12-02 19:34:26','t'),(18,5,'0000-00-00 00:00:00','q'),(19,4,'0000-00-00 00:00:00','b'),(20,5,'2007-12-28 00:00:00','w'),(21,3,'2004-08-02 11:48:43','m'),(22,0,'0000-00-00 00:00:00','x'),(23,8,'2004-04-19 12:18:43',''),(24,0,'2009-04-27 00:00:00','w'),(25,4,'2006-10-20 14:52:15','x'),(26,0,'0000-00-00 00:00:00','e'),(27,0,'2002-03-22 11:48:37','e'),(28,2,'0000-00-00 00:00:00','p'),(29,0,'2001-01-04 03:55:07','x'); CREATE TABLE `C` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `int_nokey` int(11) NOT NULL, `datetime_key` datetime NOT NULL, `varchar_key` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1; INSERT INTO `C` VALUES (1,9,'0000-00-00 00:00:00','p'),(2,0,'2002-02-09 07:38:13','v'),(3,8,'2001-05-03 12:08:14','t'),(4,3,'0000-00-00 00:00:00','u'),(5,7,'2009-07-28 03:43:30','n'),(6,0,'2009-08-04 00:00:00','l'),(7,1,'0000-00-00 00:00:00','h'),(8,9,'0000-00-00 00:00:00','u'),(9,0,'2005-08-02 17:16:54','n'),(10,9,'2002-12-21 00:00:00','j'),(11,0,'2005-08-15 12:37:35','k'),(12,5,'0000-00-00 00:00:00','e'),(13,0,'2006-03-10 00:00:00','i'),(14,8,'2005-05-16 11:02:36','u'),(15,8,'2008-11-02 00:00:00','n'),(16,5,'2006-03-15 00:00:00','b'),(17,1,'0000-00-00 00:00:00','x'),(18,7,'0000-00-00 00:00:00',''),(19,0,'2008-12-17 20:15:40','q'),(20,9,'0000-00-00 00:00:00','u'); CREATE TABLE `BB` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `int_nokey` int(11) NOT NULL, `datetime_key` datetime NOT NULL, `varchar_key` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1; INSERT INTO `BB` VALUES (10,8,'2007-08-19 08:08:38','i'),(11,0,'2000-05-21 03:51:51',''); SELECT DISTINCT `datetime_key` FROM C WHERE ( `int_nokey` , `pk` ) IN ( SELECT INNR .`pk` , INNR .`pk` FROM CC LEFT JOIN BB INNR ON INNR .`varchar_key` ) AND `pk` = 9 ; DROP TABLE CC, C, BB; # End of test case for query 0 # Begin test case for query 1 --disable_warnings DROP TABLE IF EXISTS CC, C, BB; --enable_warnings CREATE TABLE `CC` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `int_nokey` int(11) NOT NULL, `int_key` int(11) NOT NULL, `date_key` date NOT NULL, `datetime_key` datetime NOT NULL, `varchar_key` varchar(1) NOT NULL, `varchar_nokey` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `int_key` (`int_key`), KEY `date_key` (`date_key`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1; INSERT INTO `CC` VALUES (10,0,8,'2007-02-14','2006-07-07 07:26:28','q','q'),(11,5,8,'2002-10-03','2002-09-23 00:00:00','m','m'),(12,7,3,'2006-12-02','0000-00-00 00:00:00','j','j'),(13,1,2,'2007-05-02','2006-06-07 00:00:00','z','z'),(14,8,2,'2001-11-18','2000-09-16 12:15:34','a','a'),(15,2,6,'2006-09-09','2007-08-05 15:47:52','',''),(16,1,8,'0000-00-00','0000-00-00 00:00:00','e','e'),(17,8,9,'2003-07-22','2005-12-02 19:34:26','t','t'),(18,5,2,'2001-12-22','0000-00-00 00:00:00','q','q'),(19,4,6,'0000-00-00','0000-00-00 00:00:00','b','b'),(20,5,5,'2006-09-02','2007-12-28 00:00:00','w','w'),(21,3,2,'0000-00-00','2004-08-02 11:48:43','m','m'),(22,0,4,'0000-00-00','0000-00-00 00:00:00','x','x'),(23,8,9,'2001-02-28','2004-04-19 12:18:43','',''),(24,0,6,'0000-00-00','2009-04-27 00:00:00','w','w'),(25,4,5,'2007-05-19','2006-10-20 14:52:15','x','x'),(26,0,0,'2005-02-15','0000-00-00 00:00:00','e','e'),(27,0,0,'2000-10-19','2002-03-22 11:48:37','e','e'),(28,2,8,'2005-07-07','0000-00-00 00:00:00','p','p'),(29,0,0,'2008-10-18','2001-01-04 03:55:07','x','x'); CREATE TABLE `C` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `int_nokey` int(11) NOT NULL, `int_key` int(11) NOT NULL, `date_key` date NOT NULL, `datetime_key` datetime NOT NULL, `varchar_key` varchar(1) NOT NULL, `varchar_nokey` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `int_key` (`int_key`), KEY `date_key` (`date_key`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1; INSERT INTO `C` VALUES (1,9,9,'2007-12-01','0000-00-00 00:00:00','p','p'),(2,0,0,'0000-00-00','2002-02-09 07:38:13','v','v'),(3,8,6,'0000-00-00','2001-05-03 12:08:14','t','t'),(4,3,6,'2002-05-07','0000-00-00 00:00:00','u','u'),(5,7,6,'0000-00-00','2009-07-28 03:43:30','n','n'),(6,0,4,'0000-00-00','2009-08-04 00:00:00','l','l'),(7,1,7,'0000-00-00','0000-00-00 00:00:00','h','h'),(8,9,4,'0000-00-00','0000-00-00 00:00:00','u','u'),(9,0,8,'0000-00-00','2005-08-02 17:16:54','n','n'),(10,9,4,'2000-12-18','2002-12-21 00:00:00','j','j'),(11,0,7,'2005-11-13','2005-08-15 12:37:35','k','k'),(12,5,5,'0000-00-00','0000-00-00 00:00:00','e','e'),(13,0,0,'2003-11-12','2006-03-10 00:00:00','i','i'),(14,8,5,'2006-02-20','2005-05-16 11:02:36','u','u'),(15,8,7,'2005-02-12','2008-11-02 00:00:00','n','n'),(16,5,2,'2009-07-20','2006-03-15 00:00:00','b','b'),(17,1,8,'2005-02-24','0000-00-00 00:00:00','x','x'),(18,7,0,'0000-00-00','0000-00-00 00:00:00','',''),(19,0,9,'0000-00-00','2008-12-17 20:15:40','q','q'),(20,9,5,'0000-00-00','0000-00-00 00:00:00','u','u'); CREATE TABLE `BB` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `int_nokey` int(11) NOT NULL, `int_key` int(11) NOT NULL, `date_key` date NOT NULL, `datetime_key` datetime NOT NULL, `varchar_key` varchar(1) NOT NULL, `varchar_nokey` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `int_key` (`int_key`), KEY `date_key` (`date_key`), KEY `datetime_key` (`datetime_key`), KEY `varchar_key` (`varchar_key`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1; INSERT INTO `BB` VALUES (10,8,5,'0000-00-00','2007-08-19 08:08:38','i','i'),(11,0,8,'2005-08-18','2000-05-21 03:51:51','',''); SELECT DISTINCT BIT_AND( OUTR . `datetime_key` ) AS X FROM C AS OUTR WHERE ( OUTR . `int_nokey` , OUTR . `pk` ) IN ( SELECT DISTINCT INNR . `pk` AS X , INNR . `pk` AS Y FROM CC AS INNR2 LEFT JOIN BB AS INNR ON ( INNR2 . `varchar_nokey` = INNR . `varchar_key` ) WHERE INNR . `date_key` BETWEEN '2009-04-26' AND '2004-08-21' ) AND OUTR . `pk` = 9 ORDER BY OUTR . `int_key` , OUTR . `pk`; DROP TABLE CC, C, BB; # End of test case for query 1
[2 Oct 2009 14:41]
Guilhem Bichot
testcase for this bug has been added to 6.0-code-base-bugfixing/mysql-test/suite/optimizer_unfixed_bugs/*/bug45219.*
[13 Nov 2009 11:52]
Øystein Grøvlen
This is a duplicate of Bug#46692. It has been verified that a fix for that bug fixes this issue too.