Test case with different join_cache_levels CREATE TABLE `C` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `col_int_key` int(11) NOT NULL, `col_varchar_key` varchar(1) NOT NULL, PRIMARY KEY (`pk`), KEY `col_int_key` (`col_int_key`), KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`) ) ENGINE=MARIA AUTO_INCREMENT=21 DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1; INSERT INTO `C` VALUES (1,9,'x'); INSERT INTO `C` VALUES (2,5,'g'); INSERT INTO `C` VALUES (3,1,'o'); INSERT INTO `C` VALUES (4,0,'g'); INSERT INTO `C` VALUES (5,1,'v'); INSERT INTO `C` VALUES (6,190,'m'); INSERT INTO `C` VALUES (7,6,'x'); INSERT INTO `C` VALUES (8,3,'c'); INSERT INTO `C` VALUES (9,4,'z'); INSERT INTO `C` VALUES (10,3,'i'); INSERT INTO `C` VALUES (11,186,'x'); INSERT INTO `C` VALUES (12,1,'g'); INSERT INTO `C` VALUES (13,8,'q'); INSERT INTO `C` VALUES (14,226,'m'); INSERT INTO `C` VALUES (15,133,'p'); INSERT INTO `C` VALUES (16,6,'e'); INSERT INTO `C` VALUES (17,3,'t'); INSERT INTO `C` VALUES (18,8,'j'); INSERT INTO `C` VALUES (19,5,'h'); INSERT INTO `C` VALUES (20,7,'w'); SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 1; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 2; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 3; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 4; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 5; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 6; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 7; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; SET SESSION join_cache_level = 8; SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ; EXPLAIN SELECT COUNT(table1 .`col_varchar_key`) FROM C table1 STRAIGHT_JOIN ( C table2 STRAIGHT_JOIN C table3 ON table3 .`col_varchar_key` = table2 .`col_varchar_key` AND table3 .`col_int_key` < table2 .`col_int_key` ) ON table3 .`pk` ;