Skip to content

overflow during plan cost calculation leads to wrong join reorder #56704

@apollodafoni

Description

@apollodafoni

Bug Report

Please answer these questions before submitting your issue. Thanks!

1. Minimal reproduce step (Required)

CREATE TABLE `lrr_test` (   `COL102` double DEFAULT NULL,   `COL1` double GENERATED ALWAYS AS (`COL102` + 10) STORED NOT NULL,   PRIMARY KEY (`COL1`) /*T![clustered_index] CLUSTERED */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

The following datasets can be used:

mysql> select * from lrr_test;
+-------------------------+-------------------------+
| COL102 | COL1 |
+-------------------------+-------------------------+
| -1.704648925036604e308 | -1.704648925036604e308 |
| -1.6888619680353582e308 | -1.6888619680353582e308 |
| -1.6685908644498436e308 | -1.6685908644498436e308 |
| -1.6311134967437805e308 | -1.6311134967437805e308 |
| -1.6128280680807152e308 | -1.6128280680807152e308 |
| -1.5899713947158026e308 | -1.5899713947158026e308 |
| -1.5709457594070477e308 | -1.5709457594070477e308 |
| -1.4925714566991343e308 | -1.4925714566991343e308 |
| -1.4705985087370154e308 | -1.4705985087370154e308 |
| -1.4451316666300039e308 | -1.4451316666300039e308 |
| -1.3946576985986583e308 | -1.3946576985986583e308 |
| -1.3695679630646804e308 | -1.3695679630646804e308 |
| -1.3208992137984086e308 | -1.3208992137984086e308 |
| -1.2887981369134862e308 | -1.2887981369134862e308 |
| -1.2119996449796167e308 | -1.2119996449796167e308 |
| -1.195172956104992e308 | -1.195172956104992e308 |
| -1.1929781068369925e308 | -1.1929781068369925e308 |
| -1.1746351299417647e308 | -1.1746351299417647e308 |
| -1.1237012620945195e308 | -1.1237012620945195e308 |
| -1.1223448185004882e308 | -1.1223448185004882e308 |
| -1.0974439629672084e308 | -1.0974439629672084e308 |
| -1.0657654808610821e308 | -1.0657654808610821e308 |
| -1.0582598945271716e308 | -1.0582598945271716e308 |
| -1.0565276887850733e308 | -1.0565276887850733e308 |
| -1.0416104832981696e308 | -1.0416104832981696e308 |
| -1.0368741532690337e308 | -1.0368741532690337e308 |
| -1.033521479407133e308 | -1.033521479407133e308 |
| -1.0232269544119505e308 | -1.0232269544119505e308 |
| -9.31943312515408e307 | -9.31943312515408e307 |
| -9.05107332838438e307 | -9.05107332838438e307 |
| -8.276443475796885e307 | -8.276443475796885e307 |
| -7.845086666145396e307 | -7.845086666145396e307 |
| -7.664543340054255e307 | -7.664543340054255e307 |
| -7.235369799352141e307 | -7.235369799352141e307 |
| -7.047280050755922e307 | -7.047280050755922e307 |
| -6.62205033356235e307 | -6.62205033356235e307 |
| -6.35964999739255e307 | -6.35964999739255e307 |
| -5.989391229038818e307 | -5.989391229038818e307 |
| -5.974526205854541e307 | -5.974526205854541e307 |
| -5.798684586589338e307 | -5.798684586589338e307 |
| -4.98047732376121e307 | -4.98047732376121e307 |
| -4.4623979626128605e307 | -4.4623979626128605e307 |
| -4.3248436443381234e307 | -4.3248436443381234e307 |
| -3.3391152928792773e307 | -3.3391152928792773e307 |
| -3.2694282487729395e307 | -3.2694282487729395e307 |
| -3.2461091065368577e307 | -3.2461091065368577e307 |
| -2.8613054009714654e307 | -2.8613054009714654e307 |
| -2.7176814604572905e307 | -2.7176814604572905e307 |
| -2.1301127705458223e307 | -2.1301127705458223e307 |
| -1.7280065154718344e307 | -1.7280065154718344e307 |
| -1.6743061442642827e307 | -1.6743061442642827e307 |
| -4.862812928655648e306 | -4.862812928655648e306 |
| -3.3262533560429795e305 | -3.3262533560429795e305 |
| 4.124952267435051e305 | 4.124952267435051e305 |
| 5.4576487694211726e306 | 5.4576487694211726e306 |
| 1.1237742400537221e307 | 1.1237742400537221e307 |
| 1.569984332645614e307 | 1.569984332645614e307 |
| 1.7966188405412235e307 | 1.7966188405412235e307 |
| 1.8619233341238355e307 | 1.8619233341238355e307 |
| 2.1152066540419881e307 | 2.1152066540419881e307 |
| 2.1764927570795164e307 | 2.1764927570795164e307 |
| 2.99416682762135e307 | 2.99416682762135e307 |
| 3.0545414962788647e307 | 3.0545414962788647e307 |
| 3.262967770716021e307 | 3.262967770716021e307 |
| 3.288944887183685e307 | 3.288944887183685e307 |
| 4.9025219351381e307 | 4.9025219351381e307 |
| 5.250864486081297e307 | 5.250864486081297e307 |
| 5.52054372134351e307 | 5.52054372134351e307 |
| 6.311436996747818e307 | 6.311436996747818e307 |
| 6.870852232080436e307 | 6.870852232080436e307 |
| 7.501871137935436e307 | 7.501871137935436e307 |
| 7.925709054822421e307 | 7.925709054822421e307 |
| 8.438195254661318e307 | 8.438195254661318e307 |
| 8.446731596918706e307 | 8.446731596918706e307 |
| 9.43580947190119e307 | 9.43580947190119e307 |
| 9.66735866233596e307 | 9.66735866233596e307 |
| 1.0022043827847664e308 | 1.0022043827847664e308 |
| 1.020869767928594e308 | 1.020869767928594e308 |
| 1.0327408606815872e308 | 1.0327408606815872e308 |
| 1.0402383684235906e308 | 1.0402383684235906e308 |
| 1.0690255622829305e308 | 1.0690255622829305e308 |
| 1.1623306052784659e308 | 1.1623306052784659e308 |
| 1.1906116361044565e308 | 1.1906116361044565e308 |
| 1.2221839628780758e308 | 1.2221839628780758e308 |
| 1.3112927565356536e308 | 1.3112927565356536e308 |
| 1.3307364382402157e308 | 1.3307364382402157e308 |
| 1.3646958839720612e308 | 1.3646958839720612e308 |
| 1.425066345632827e308 | 1.425066345632827e308 |
| 1.4433864261103511e308 | 1.4433864261103511e308 |
| 1.5038532858735658e308 | 1.5038532858735658e308 |
| 1.5079450808097928e308 | 1.5079450808097928e308 |
| 1.553628680980576e308 | 1.553628680980576e308 |
| 1.6241456663280369e308 | 1.6241456663280369e308 |
| 1.6295729949930798e308 | 1.6295729949930798e308 |
| 1.6328703529666413e308 | 1.6328703529666413e308 |
| 1.6832354056195887e308 | 1.6832354056195887e308 |
| 1.7017315016390902e308 | 1.7017315016390902e308 |
| 1.7134206410400048e308 | 1.7134206410400048e308 |
| 1.7240829054261275e308 | 1.7240829054261275e308 |
| 1.7257738639648862e308 | 1.7257738639648862e308 |
| 1.7262297095455299e308 | 1.7262297095455299e308 |
| 1.7905151735809062e308 | 1.7905151735809062e308 |
+-------------------------+-------------------------+
102 rows in set (0.12 sec)

first step:

select t1. col1, t2.col1 from lrr_test as t1 right join lrr_test as t2 on t1.col1 = t2.col1 where t1.col1 >=0;
explain select t1. col1, t2.col1 from lrr_test as t1 right join lrr_test as t2 on t1.col1 = t2.col1 where t1.col1 >=0;

second step:

analyze table lrr_test;
select t1. col1, t2.col1 from lrr_test as t1 right join lrr_test as t2 on t1.col1 = t2.col1 where t1.col1 >=0;
explain select t1. col1, t2.col1 from lrr_test as t1 right join lrr_test as t2 on t1.col1 = t2.col1 where t1.col1 >=0;

2. What did you expect to see? (Required)

The second step should return 49 rows!

3. What did you see instead (Required)

First step return 49 rows which is correct, and its execution plan is merge_join.
After analyze table, second step return 2401 rows which is wrong, and its execution plan is hash_join.

+-----------------------------+---------+-----------+---------------+----------------------------------+
| id                          | estRows | task      | access object | operator info                    |
+-----------------------------+---------+-----------+---------------+----------------------------------+
| HashJoin_9                  | NaN     | root      |               | CARTESIAN inner join             |
| ├─TableReader_14(Build)     | 49.00   | root      |               | data:TableRangeScan_13           |
| │ └─TableRangeScan_13       | 49.00   | cop[tikv] | table:t2      | range:[0,+inf], keep order:false |
| └─TableReader_12(Probe)     | 49.00   | root      |               | data:TableRangeScan_11           |
|   └─TableRangeScan_11       | 49.00   | cop[tikv] | table:t1      | range:[0,+inf], keep order:false |
+-----------------------------+---------+-----------+---------------+----------------------------------+
5 rows in set (0.04 sec)

Some returned result fragments:

| 1.7905151735809062e308 | 6.311436996747818e307 |
| 1.7905151735809062e308 | 5.52054372134351e307 |
| 1.7905151735809062e308 | 5.250864486081297e307 |
| 1.7905151735809062e308 | 4.9025219351381e307 |
| 1.7905151735809062e308 | 3.288944887183685e307 |
| 1.7905151735809062e308 | 3.262967770716021e307 |
| 1.7905151735809062e308 | 3.0545414962788647e307 |
| 1.7905151735809062e308 | 2.99416682762135e307 |
| 1.7905151735809062e308 | 2.1764927570795164e307 |
| 1.7905151735809062e308 | 2.1152066540419881e307 |
| 1.7905151735809062e308 | 1.8619233341238355e307 |
| 1.7905151735809062e308 | 1.7966188405412235e307 |
| 1.7905151735809062e308 | 1.569984332645614e307 |
| 1.7905151735809062e308 | 1.1237742400537221e307 |
| 1.7905151735809062e308 | 5.4576487694211726e306 |
| 1.7905151735809062e308 | 4.124952267435051e305 |
+------------------------+------------------------+
2401 rows in set (0.15 sec)

4. What is your TiDB version? (Required)

Release Version: v8.4.0
Edition: Community
Git Commit Hash: 1832b27
Git Branch: HEAD
UTC Build Time: 2024-10-15 03:47:37
GoVersion: go1.23.2
Race Enabled: false
Check Table Before Drop: false
Store: tikv

Metadata

Metadata

Assignees

Labels

affects-6.1This bug affects the 6.1.x(LTS) versions.affects-6.5This bug affects the 6.5.x(LTS) versions.affects-7.1This bug affects the 7.1.x(LTS) versions.affects-7.5This bug affects the 7.5.x(LTS) versions.affects-8.1This bug affects the 8.1.x(LTS) versions.affects-8.4impact/wrong-resultseverity/criticalsig/plannerSIG: Plannertype/bugThe issue is confirmed as a bug.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions