Re: Wrong result with join_cache_level=3, join_buffer_size=10K, join_cache_hashed=on in maria-5.3-mwl128
Here is another test case with the default join_buffer_size:
CREATE TABLE `M` (
`col_varchar_1024_latin1_key` varchar(1024) DEFAULT NULL,
`col_varchar_10_latin1_key` varchar(10) DEFAULT NULL,
`col_datetime_key` datetime DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
KEY `col_int_key` (`col_int_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `M` VALUES ('XMCXE','bqcpbhsnmm','2005-12-06 08:39:18',-1849032704);
INSERT INTO `M` VALUES ('IOVYB','t','2000-01-20 00:00:00',0);
CREATE TABLE `K` (
`col_datetime_key` datetime DEFAULT NULL,
`col_int` int(11) DEFAULT NULL,
`col_varchar_10_latin1_key` varchar(10) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_varchar_1024_latin1_key` varchar(1024) DEFAULT NULL,
KEY `col_varchar_1024_latin1_key` (`col_varchar_1024_latin1_key`(1000)),
KEY `test_idx` (`col_int_key`,`col_int`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `K` VALUES ('2005-06-08 22:15:04',4,'was',-418381824,'clasizomrohcwftsfaiijvvsiknlnceuogscieejgjkpwchiklgqvfuxfplhqeamqxggdleymimjjswulpxkwcovdvzgtoqdxqqgqnjzskbuhlkhrvbhckqnnqpijobqqphtzywplgonecwmiucqtczfbafejsqpklcsvlaftwkzxpkxwbaropraalifipatjkgfsxdgnqyhtfpdneqhtmdvjvpzxljycsdkqbylczifltspxjbbrweeclwnlnbxzvfyfyjwydjrfimdjjksvjgxgondjphggpfujlvfrcclylvbajaqzywwregtqthijfmdtmvluizjjpratqbicqozmbuykypyeypkrrpdgpiv');
INSERT INTO `K` VALUES ('2008-09-12 09:33:37',1119289344,'no',2,'KFXFJ');
INSERT INTO `K` VALUES ('2006-09-05 00:00:00',3,'xgclasizom',527958016,'back');
INSERT INTO `K` VALUES ('2006-09-04 23:28:42',4,'TNNQF',0,'iizmxgclasizomrohcwftsfaiijvvsiknlnceuogscieejgjkpwchiklgqvfuxfplhqeamqxggdleymimjjswulpxkwcovdvzgtoqdxqqgqnjzskbuhlkhrvbhckqnnqpijobqqphtzywplgonecwmiucqtczfbafejsqpklcsvlaftwkzxpkxwbaropraalifipatjkgfsxdgnqyhtfpdneqhtmdvjvpzxljycsdkqbylczifltspxjbbrweeclwnlnbxzvfyfyjwydjrfimdjjksvjgxgondjphggpfujlvfrcclylvbajaqzywwregtqthijfmdtmvluizjjpratqbicqozmbuykypyeypkrrpdgpivtpkdcydziiscsjvfbwcpaigrlddeirkedqogmadegpyckuuzpxjwusjbafkgsucpeudjqivgzqeujkxitkixmopghkyhimjnwsxdriisfcjhpsvbisbdsddmacyzcdyecostdenazbhzvbqenjfykzlzfmbrwvqhnypqblxeyaykaveiznsroiuhqelrkjmviebfkjuxgkfuandsosoydkttflrhvsglikkubitlqptnsglxgjptrxkrurwywowifjftrvtexasdbsdzvppwiaonidtelahawdpokevmcurruavqeylhzfcsnkgfjrhwkchovvqxwkxxwptyjubpiuznkrehnxsdoxbdbyemjivvduklxmkalbyjykocwukfcsamuzevibremfzrymegyqtlrxbrcdlqdvxe');
INSERT INTO `K` VALUES ('2006-07-15 00:13:49',356712448,'BBNQK',-1095696384,'trziizmxgclasizomrohcwftsfaiijvvsiknlnceuogscieejgjkpwchiklgqvfuxfplhqeamqxggdleymimjjswulpxkwcovdvzgtoqdxqqgqnjzskbuhlkhrvbhckqnnqpijobqqphtzywplgonecwmiucqtczfbafejsqpklcsvlaftwkzxpkxwbaropraalifipatjkgfsxdgnqyhtfpdneqhtmdvjvpzxljycsdkqbylczifltspxjbbrweeclwnlnbxzvfyfyjwydjrfimdjjksvjgxgondjphggpfujlvfrcclylvbajaqzywwregtqthijfmdtmvluizjjpratqbicqozmbuykypyeypkrrpdgpivtpkdcydziiscsjvfbwcpaigrlddeirkedqogmadegpyckuuzpxjwusjbafkgsucpeudjqivgzqeujkxitkixmopghkyhimjnwsxdriisfcjhpsvbisbdsddmacyzcdyecostdenazbhzvbqenjfykzlzfmbrwvqhnypqblxeyaykaveiznsroiuhqelrkjmviebfkjuxgkfuandsosoydkttflrhvsglikkubitlqptnsglxgjptrxkrurwywowifjftrvtexasdbsdzvppwiaonidtelahawdpokevmcurruavqeylhzfcsnkgfjrhwkchovvqxwkxxwptyjubpiuznkrehnxsdoxbdbyemjivvduklxmkalbyjykocwukfcsamuzevibremfzrymegyqtlrxbrcdlqdvxefnpgoqgasadrjykjzqnouqsqgyoqkwrlvqlaxqh');
INSERT INTO `K` VALUES ('0000-00-00 00:00:00',4,'pgtrziizmx',1604059136,'t');
INSERT INTO `K` VALUES ('0000-00-00 00:00:00',428277760,'XVPUL',6,'BQABY');
SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
EXPLAIN SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
SET SESSION join_cache_level = 5;
SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
EXPLAIN SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
CREATE TABLE p1 AS SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
SET SESSION optimizer_switch='join_cache_bka=off';
SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
EXPLAIN SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
CREATE TABLE p2 AS SELECT table1 .`col_datetime_key` FROM K table1 JOIN M table2 ON table1 .`col_varchar_1024_latin1_key` = table2 .`col_varchar_10_latin1_key` WHERE 6 OR 4 AND table2 .`col_int_key` ;
--let $diff = `SELECT ((SELECT COUNT
FROM p2) - (SELECT COUNT
FROM p1)) != 0`
- if ($diff)
{
# --die repeatable
# }
- --exit
Re: Wrong result with join_cache_level=3, join_buffer_size=10K, join_cache_hashed=on in maria-5.3-mwl128
Test case:
--source include/have_innodb.inc
CREATE TABLE `X` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`pk`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=latin1;
INSERT INTO `X` VALUES (1);
INSERT INTO `X` VALUES (2);
INSERT INTO `X` VALUES (11);
INSERT INTO `X` VALUES (12);
INSERT INTO `X` VALUES (13);
INSERT INTO `X` VALUES (14);
INSERT INTO `X` VALUES (15);
INSERT INTO `X` VALUES (16);
INSERT INTO `X` VALUES (17);
INSERT INTO `X` VALUES (18);
INSERT INTO `X` VALUES (19);
CREATE TABLE `V` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`pk`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1;
INSERT INTO `V` VALUES (1);
INSERT INTO `V` VALUES (10);
INSERT INTO `V` VALUES (11);
INSERT INTO `V` VALUES (12);
INSERT INTO `V` VALUES (13);
INSERT INTO `V` VALUES (14);
INSERT INTO `V` VALUES (15);
INSERT INTO `V` VALUES (16);
INSERT INTO `V` VALUES (17);
INSERT INTO `V` VALUES (18);
INSERT INTO `V` VALUES (19);
INSERT INTO `V` VALUES (20);
INSERT INTO `V` VALUES (21);
SET SESSION join_cache_level=3;
SET SESSION join_buffer_size=10000;
SELECT table1 .`pk`
FROM X table1 JOIN V table2 ON table1 .`pk` = table2 .`pk`
WHERE table2 .`pk` <> 8;
EXPLAIN SELECT table1 .`pk`
FROM X table1 JOIN V table2 ON table1 .`pk` = table2 .`pk`
WHERE table2 .`pk` <> 8;
CREATE TABLE p1 AS
SELECT table1 .`pk`
FROM X table1 JOIN V table2 ON table1 .`pk` = table2 .`pk`
WHERE table2 .`pk` <> 8;
SET SESSION optimizer_switch='join_cache_hashed=off';
SELECT table1 .`pk`
FROM X table1 JOIN V table2 ON table1 .`pk` = table2 .`pk`
WHERE table2 .`pk` <> 8;
EXPLAIN SELECT table1 .`pk`
FROM X table1 JOIN V table2 ON table1 .`pk` = table2 .`pk`
WHERE table2 .`pk` <> 8;
CREATE TABLE p2 AS
SELECT table1 .`pk`
FROM X table1 JOIN V table2 ON table1 .`pk` = table2 .`pk`
WHERE table2 .`pk` <> 8;
--let $diff_table_1 = test.p1
--let $diff_table_2 = test.p2
--source include/diff_tables.inc