[MDEV-29695] Incorrect Join Execution When Controlling Join Cache Created: 2022-10-04  Updated: 2023-11-28

Status: Confirmed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 10.3, 10.4, 10.8.5, 10.5, 10.6, 10.7, 10.8, 10.9
Fix Version/s: 10.4, 10.5, 10.6

Type: Bug Priority: Major
Reporter: Xiu Tang Assignee: Sergei Petrunia
Resolution: Unresolved Votes: 0
Labels: None


 Description   

CREATE TABLE `t1` (
  `c0` int(11) NOT NULL,
  `c1` varchar(117) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
INSERT INTO `t1` VALUES
(-1163295139, ''),
(114582533, ' '),
(-1545545040, '');
 
 
CREATE TABLE `t2` (
  `c0` int(11) NOT NULL,
  `c1` varchar(23) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
CREATE TABLE `t3` (
  `c0` int(11) NOT NULL,
  `c1` varchar(79) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
INSERT INTO `t3` VALUES
(1444867772, '8'),
(1042894530, '');
 
MariaDB > SELECT t2.c0 
FROM t2  RIGHT OUTER JOIN t1 ON t1.c1 = t2.c1  
RIGHT OUTER JOIN t3 ON t1.c1 = t3.c1;
 
+------+
| c0   |
+------+
| NULL |
| NULL |
| NULL |
| NULL |
+------+
4 rows in set (0.000 sec)
 
MariaDB > SET SESSION join_cache_level = 7;
 
MariaDB > SELECT t2.c0 
FROM t2  RIGHT OUTER JOIN t1 ON t1.c1 = t2.c1  
RIGHT OUTER JOIN t3 ON t1.c1 = t3.c1;
+------+
| c0   |
+------+
| NULL |
| NULL |
| NULL |
+------+
3 rows in set (0.001 sec)
 
MariaDB > SET optimizer_switch='join_cache_incremental=off';
 
MariaDB > SELECT t2.c0 
FROM t2  RIGHT OUTER JOIN t1 ON t1.c1 = t2.c1  
RIGHT OUTER JOIN t3 ON t1.c1 = t3.c1;
 
+------+
| c0   |
+------+
| NULL |
| NULL |
| NULL |
| NULL |
+------+
4 rows in set (0.000 sec)
 
 
 



 Comments   
Comment by Alice Sherepa [ 2022-10-04 ]

Thank you for the report!
I repeated as described on 10.3-10.10 with InnoDB/MyIsam.

CREATE TABLE t1 ( c0 int, c1 varchar(117)) ;
INSERT INTO t1 VALUES (-1163295139, ''),(114582533, ' '),(-1545545040, '');
 
CREATE TABLE t2 ( c0 int, c1 varchar(23)) ;
 
CREATE TABLE t3 ( c0 int, c1 varchar(79)) ;
INSERT INTO t3 VALUES(1444867772, '8'),(1042894530, '');
 
SELECT t2.c0
FROM t2
RIGHT  JOIN t1 ON t1.c1 = t2.c1
RIGHT JOIN t3 ON t1.c1 = t3.c1;
 
SET SESSION join_cache_level = 7;
 
SELECT t2.c0
FROM t2
RIGHT  JOIN t1 ON t1.c1 = t2.c1
RIGHT JOIN t3 ON t1.c1 = t3.c1;

analyze SELECT t2.c0
FROM t2
RIGHT  JOIN t1 ON t1.c1 = t2.c1
RIGHT JOIN t3 ON t1.c1 = t3.c1;
id  select_type table   type    possible_keys   key key_len ref rows    r_rows  filtered    r_filtered  Extra
1   SIMPLE  t3  ALL NULL    NULL    NULL    NULL    2   2.00    100.00  100.00  
1   SIMPLE  t1  ALL NULL    NULL    NULL    NULL    3   3.00    100.00  66.67   Using where; Using join buffer (flat, BNL join)
1   SIMPLE  t2  ALL NULL    NULL    NULL    NULL    0   0.00    0.00    100.00  Using where; Using join buffer (incremental, BNL join)
SET SESSION join_cache_level = 7;
analyze
SELECT t2.c0
FROM t2
RIGHT  JOIN t1 ON t1.c1 = t2.c1
RIGHT JOIN t3 ON t1.c1 = t3.c1;
id  select_type table   type    possible_keys   key key_len ref rows    r_rows  filtered    r_filtered  Extra
1   SIMPLE  t3  ALL NULL    NULL    NULL    NULL    2   2.00    100.00  100.00  
1   SIMPLE  t1  hash_ALL    NULL    #hash#$hj   120 test.t3.c1  3   3.00    100.00  150.00  Using where; Using join buffer (flat, BNLH join)
1   SIMPLE  t2  hash_ALL    NULL    #hash#$hj   26  test.t1.c1  0   0.00    0.00    100.00  Using where; Using join buffer (incremental, BNLH join)

Generated at Thu Feb 08 10:10:35 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.