[MDEV-7844] Wrong result with optimize_join_buffer_size=on on query with LEFT JOINs and constant table Created: 2015-03-26  Updated: 2022-12-05  Resolved: 2022-12-05

Status: Closed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 5.3.13, 5.5, 10.0, 10.1, 10.2, 10.3, 10.4
Fix Version/s: N/A

Type: Bug Priority: Minor
Reporter: Elena Stepanova Assignee: Igor Babaev
Resolution: Cannot Reproduce Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-8606 Wrong results with optimize_join_buff... Closed

 Description   

CREATE TABLE t1 (f1 INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES (4),(5),(8),(4),(1),(4),(8),(6),(4),(9),(2),(10),(9);
 
CREATE TABLE t2 (f2 INT) ENGINE=MyISAM;
INSERT INTO t2 VALUES (1),(2);
 
CREATE TABLE t3 (f3 INT) ENGINE=MyISAM;
INSERT INTO t3 VALUES (10);
 
CREATE TABLE t4 (f4 INT) ENGINE=MyISAM;
 
ANALYZE TABLE t1, t2, t3, t4;
 
set optimizer_switch = 'optimize_join_buffer_size=off';
SELECT f3 FROM t1 LEFT JOIN ( t2 LEFT JOIN t3 ON f2 = f3 INNER JOIN t4 ) ON f1 = f2;
 
set optimizer_switch = 'optimize_join_buffer_size=on';
SELECT f3 FROM t1 LEFT JOIN ( t2 LEFT JOIN t3 ON f2 = f3 INNER JOIN t4 ) ON f1 = f2;
 
# Cleanup
DROP TABLE t1, t2, t3, t4;

d2ba9edd Result with optimize_join_buffer_size=off

f3
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

d2ba9edd Result with optimize_join_buffer_size=on

f3
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
10
NULL

The result with all NULLs is probably correct. In any case, one of them is wrong.



 Comments   
Comment by Alice Sherepa [ 2018-11-19 ]

MariaDB [test]> set optimizer_switch = 'optimize_join_buffer_size=on';
Query OK, 0 rows affected (0.000 sec)
MariaDB [test]> SELECT * FROM t1 LEFT JOIN ( t2 LEFT JOIN t3 ON f2 = f3 INNER JOIN t4 ) ON f1 = f2;
+------+------+------+------+
| f1   | f2   | f3   | f4   |
+------+------+------+------+
|    4 | NULL | NULL | NULL |
|    5 | NULL | NULL | NULL |
|    8 | NULL | NULL | NULL |
|    4 | NULL | NULL | NULL |
|    1 | NULL | NULL | NULL |
|    4 | NULL | NULL | NULL |
|    8 | NULL | NULL | NULL |
|    6 | NULL | NULL | NULL |
|    4 | NULL | NULL | NULL |
|    9 | NULL | NULL | NULL |
|    2 | NULL | NULL | NULL |
|   10 | NULL | NULL | NULL |
|    9 | NULL | NULL | NULL |
+------+------+------+------+
13 rows in set (0.001 sec)
 
MariaDB [test]> SELECT f3 FROM t1 LEFT JOIN ( t2 LEFT JOIN t3 ON f2 = f3 INNER JOIN t4 ) ON f1 = f2; 
+------+
| f3   |
+------+
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
| NULL |
|   10 |
| NULL |
+------+
13 rows in set (0.001 sec)
 
MariaDB [test]> set optimizer_switch = 'optimize_join_buffer_size=off';
Query OK, 0 rows affected (0.000 sec)
 
MariaDB [test]> analyze SELECT f3 FROM t1 LEFT JOIN ( t2 LEFT JOIN t3 ON f2 = f3 INNER JOIN t4 ) ON f1 = f2;
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+--------------------------------------------------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | r_rows | filtered | r_filtered | Extra                                                  |
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+--------------------------------------------------------+
|    1 | SIMPLE      | t1    | ALL  | NULL          | NULL | NULL    | NULL |   13 |  13.00 |   100.00 |     100.00 |                                                        |
|    1 | SIMPLE      | t4    | ALL  | NULL          | NULL | NULL    | NULL |    0 |   0.00 |     0.00 |     100.00 | Using join buffer (flat, BNL join)                     |
|    1 | SIMPLE      | t2    | ALL  | NULL          | NULL | NULL    | NULL |    2 |   NULL |   100.00 |       NULL | Using where; Using join buffer (incremental, BNL join) |
|    1 | SIMPLE      | t3    | ALL  | NULL          | NULL | NULL    | NULL |    1 |   NULL |   100.00 |       NULL | Using where; Using join buffer (incremental, BNL join) |
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+--------------------------------------------------------+
4 rows in set (0.000 sec)
 
MariaDB [test]> set optimizer_switch = 'optimize_join_buffer_size=on';
Query OK, 0 rows affected (0.000 sec)
 
MariaDB [test]> analyze SELECT f3 FROM t1 LEFT JOIN ( t2 LEFT JOIN t3 ON f2 = f3 INNER JOIN t4 ) ON f1 = f2;
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+--------------------------------------------------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | r_rows | filtered | r_filtered | Extra                                                  |
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+--------------------------------------------------------+
|    1 | SIMPLE      | t1    | ALL  | NULL          | NULL | NULL    | NULL |   13 |  13.00 |   100.00 |     100.00 |                                                        |
|    1 | SIMPLE      | t4    | ALL  | NULL          | NULL | NULL    | NULL |    0 |   0.00 |     0.00 |     100.00 | Using join buffer (flat, BNL join)                     |
|    1 | SIMPLE      | t2    | ALL  | NULL          | NULL | NULL    | NULL |    2 |   NULL |   100.00 |       NULL | Using where; Using join buffer (incremental, BNL join) |
|    1 | SIMPLE      | t3    | ALL  | NULL          | NULL | NULL    | NULL |    1 |   1.00 |   100.00 |     650.00 | Using where; Using join buffer (incremental, BNL join) |
+------+-------------+-------+------+---------------+------+---------+------+------+--------+----------+------------+--------------------------------------------------------+
4 rows in set (0.001 sec)

Comment by Alice Sherepa [ 2022-12-05 ]

Currently 10.3 180b2bcd5389082e200f - 10.11 return correct results.

Generated at Thu Feb 08 07:22:41 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.