| Bug #72854 | Extremely slow performance with outer joins and join buffer | ||
|---|---|---|---|
| Submitted: | 3 Jun 2014 20:12 | Modified: | 5 Oct 2017 15:43 |
| Reporter: | Sergey Petrunya | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
| Version: | 5.6.17 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[3 Jun 2014 20:12]
Sergey Petrunya
[3 Jun 2014 21:08]
MySQL Verification Team
mysql 5.6 > select now();
+---------------------+
| now() |
+---------------------+
| 2014-06-03 17:48:44 |
+---------------------+
1 row in set (0.00 sec)
mysql 5.6 > SELECT t.*
-> FROM
-> t1 t
-> LEFT JOIN t2 c1 ON c1.parent_id = t.id AND c1.col2 = "val"
-> LEFT JOIN t2 c2 ON c2.parent_id = t.id AND c2.col2 = "val"
-> LEFT JOIN t2 c3 ON c3.parent_id = t.id AND c3.col2 = "val"
-> LEFT JOIN t2 c4 ON c4.parent_id = t.id AND c4.col2 = "val"
-> LEFT JOIN t2 c5 ON c5.parent_id = t.id AND c5.col2 = "val"
-> LEFT JOIN t2 c6 ON c6.parent_id = t.id AND c6.col2 = "val"
-> LEFT JOIN t2 c7 ON c7.parent_id = t.id AND c7.col2 = "val"
-> LEFT JOIN t2 c8 ON c8.parent_id = t.id AND c8.col2 = "val"
-> LEFT JOIN t2 c9 ON c9.parent_id = t.id AND c9.col2 = "val"
-> LEFT JOIN t2 c10 ON c10.parent_id = t.id AND c10.col2 = "val"
-> LEFT JOIN t2 c11 ON c11.parent_id = t.id AND c11.col2 = "val"
-> LEFT JOIN t2 c12 ON c12.parent_id = t.id AND c12.col2 = "val"
-> LEFT JOIN t2 c13 ON c13.parent_id = t.id AND c13.col2 = "val"
-> LEFT JOIN t2 c14 ON c14.parent_id = t.id AND c14.col2 = "val"
-> LEFT JOIN t2 c15 ON c15.parent_id = t.id AND c15.col2 = "val"
-> LEFT JOIN t2 c16 ON c16.parent_id = t.id AND c16.col2 = "val"
-> LEFT JOIN t2 c17 ON c17.parent_id = t.id AND c17.col2 = "val"
-> LEFT JOIN t2 c18 ON c18.parent_id = t.id AND c18.col2 = "val"
-> LEFT JOIN t2 c19 ON c19.parent_id = t.id AND c19.col2 = "val"
-> LEFT JOIN t2 c20 ON c20.parent_id = t.id AND c20.col2 = "val"
-> LEFT JOIN t2 c21 ON c21.parent_id = t.id AND c21.col2 = "val"
-> LEFT JOIN t2 c22 ON c22.parent_id = t.id AND c22.col2 = "val"
-> LEFT JOIN t2 c23 ON c23.parent_id = t.id AND c23.col2 = "val"
-> LEFT JOIN t2 c24 ON c24.parent_id = t.id AND c24.col2 = "val"
-> LEFT JOIN t2 c25 ON c25.parent_id = t.id AND c25.col2 = "val"
-> LEFT JOIN t2 c26 ON c26.parent_id = t.id AND c26.col2 = "val"
-> LEFT JOIN t2 c27 ON c27.parent_id = t.id AND c27.col2 = "val"
-> LEFT JOIN t2 c28 ON c28.parent_id = t.id AND c28.col2 = "val"
-> LEFT JOIN t2 c29 ON c29.parent_id = t.id AND c29.col2 = "val"
-> LEFT JOIN t2 c30 ON c30.parent_id = t.id AND c30.col2 = "val"
-> LEFT JOIN t2 c31 ON c31.parent_id = t.id AND c31.col2 = "val"
-> LEFT JOIN t2 c32 ON c32.parent_id = t.id AND c32.col2 = "val"
-> LEFT JOIN t2 c33 ON c33.parent_id = t.id AND c33.col2 = "val"
-> ORDER BY
-> col1;
Empty set (16 min 21.11 sec)
mysql 5.6 >
mysql 5.6 > select now();
+---------------------+
| now() |
+---------------------+
| 2014-06-03 18:05:11 |
+---------------------+
1 row in set (0.00 sec)
mysql 5.6 > set optimizer_switch='block_nested_loop=off';
Query OK, 0 rows affected (0.00 sec)
mysql 5.6 > select now();
+---------------------+
| now() |
+---------------------+
| 2014-06-03 18:06:37 |
+---------------------+
1 row in set (0.00 sec)
mysql 5.6 > SELECT t.*
-> FROM
-> t1 t
-> LEFT JOIN t2 c1 ON c1.parent_id = t.id AND c1.col2 = "val"
-> LEFT JOIN t2 c2 ON c2.parent_id = t.id AND c2.col2 = "val"
-> LEFT JOIN t2 c3 ON c3.parent_id = t.id AND c3.col2 = "val"
-> LEFT JOIN t2 c4 ON c4.parent_id = t.id AND c4.col2 = "val"
-> LEFT JOIN t2 c5 ON c5.parent_id = t.id AND c5.col2 = "val"
-> LEFT JOIN t2 c6 ON c6.parent_id = t.id AND c6.col2 = "val"
-> LEFT JOIN t2 c7 ON c7.parent_id = t.id AND c7.col2 = "val"
-> LEFT JOIN t2 c8 ON c8.parent_id = t.id AND c8.col2 = "val"
-> LEFT JOIN t2 c9 ON c9.parent_id = t.id AND c9.col2 = "val"
-> LEFT JOIN t2 c10 ON c10.parent_id = t.id AND c10.col2 = "val"
-> LEFT JOIN t2 c11 ON c11.parent_id = t.id AND c11.col2 = "val"
-> LEFT JOIN t2 c12 ON c12.parent_id = t.id AND c12.col2 = "val"
-> LEFT JOIN t2 c13 ON c13.parent_id = t.id AND c13.col2 = "val"
-> LEFT JOIN t2 c14 ON c14.parent_id = t.id AND c14.col2 = "val"
-> LEFT JOIN t2 c15 ON c15.parent_id = t.id AND c15.col2 = "val"
-> LEFT JOIN t2 c16 ON c16.parent_id = t.id AND c16.col2 = "val"
-> LEFT JOIN t2 c17 ON c17.parent_id = t.id AND c17.col2 = "val"
-> LEFT JOIN t2 c18 ON c18.parent_id = t.id AND c18.col2 = "val"
-> LEFT JOIN t2 c19 ON c19.parent_id = t.id AND c19.col2 = "val"
-> LEFT JOIN t2 c20 ON c20.parent_id = t.id AND c20.col2 = "val"
-> LEFT JOIN t2 c21 ON c21.parent_id = t.id AND c21.col2 = "val"
-> LEFT JOIN t2 c22 ON c22.parent_id = t.id AND c22.col2 = "val"
-> LEFT JOIN t2 c23 ON c23.parent_id = t.id AND c23.col2 = "val"
-> LEFT JOIN t2 c24 ON c24.parent_id = t.id AND c24.col2 = "val"
-> LEFT JOIN t2 c25 ON c25.parent_id = t.id AND c25.col2 = "val"
-> LEFT JOIN t2 c26 ON c26.parent_id = t.id AND c26.col2 = "val"
-> LEFT JOIN t2 c27 ON c27.parent_id = t.id AND c27.col2 = "val"
-> LEFT JOIN t2 c28 ON c28.parent_id = t.id AND c28.col2 = "val"
-> LEFT JOIN t2 c29 ON c29.parent_id = t.id AND c29.col2 = "val"
-> LEFT JOIN t2 c30 ON c30.parent_id = t.id AND c30.col2 = "val"
-> LEFT JOIN t2 c31 ON c31.parent_id = t.id AND c31.col2 = "val"
-> LEFT JOIN t2 c32 ON c32.parent_id = t.id AND c32.col2 = "val"
-> LEFT JOIN t2 c33 ON c33.parent_id = t.id AND c33.col2 = "val"
-> ORDER BY
-> col1;
Empty set (0.00 sec)
mysql 5.6 >
mysql 5.6 > select now();
+---------------------+
| now() |
+---------------------+
| 2014-06-03 18:06:37 |
+---------------------+
1 row in set (0.00 sec)
mysql 5.6 > SHOW VARIABLES LIKE "%VERSION%";
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| innodb_version | 5.6.20 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.6.20 |
| version_comment | Source distribution |
| version_compile_machine | x86_64 |
| version_compile_os | Win64 |
+-------------------------+---------------------+
7 rows in set (0.00 sec)
mysql 5.6 >
[3 Jun 2014 21:18]
MySQL Verification Team
Thank you for the bug report.
[4 Jun 2014 11:14]
MySQL Verification Team
Back yo verified following internal note.
[12 Jun 2017 15:35]
ADITYA SETH
when is this being fixed and released ? how can I help ?
[5 Oct 2017 15:43]
Paul DuBois
Posted by developer: Noted in 5.7.21, 8.0.4. Queries with many left joins were slow if join buffering was used (for example, using the block nested loop algorithm).
