Bug #13455 JOIN: different execution plans for (col=BETWEEN '0' AND '0') AND (col='0')

Submitted: 24 Sep 2005 6:03 Modified: 30 Sep 2005 18:58
Reporter: Georg Richter Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S2 (Serious)
Version:5.0.14-rc OS:Any (all)
Assigned to: Sergey Petrunya CPU Architecture:Any

[24 Sep 2005 6:03] Georg Richter
Description:
in join optimizer chooses different execution plans for

WHERE T1.MATNR='000000000000001300' 

and

WHERE T1.MATNR BETWEEN'000000000000001300' AND '000000000000001300' 

Table definition and data are attached to this bug report

How to repeat:
5.0.13-beta-log on 10.17.69.84
[08:04] root@MY2>EXPLAIN SELECT T1.* FROM SZMARA T1 JOIN SZMAKT T2 JOIN SZMVKE T3 WHERE T1.MANDT=T2.MANDT AND T1.MATNR=T2.MATNR AND T1.MANDT=T3.MANDT AND T1.MATNR=T3.MATNR AND T1.MATNR='000000000000001300';                                +----+-------------+-------+--------+------------------------------------+---------+---------+--------------------+------+--------------------------+
| id | select_type | table | type   | possible_keys                      | key     | key_len | ref                | rows | Extra                    |
+----+-------------+-------+--------+------------------------------------+---------+---------+--------------------+------+--------------------------+
|  1 | SIMPLE      | T3    | index  | PRIMARY                            | PRIMARY | 35      | NULL               | 7557 | Using where; Using index |
|  1 | SIMPLE      | T2    | ref    | PRIMARY,SZMAKT~M                   | PRIMARY | 25      | MY2.T3.MANDT,const |    1 | Using where; Using index |
|  1 | SIMPLE      | T1    | eq_ref | PRIMARY,SZMARA~L,SZMARA~O,SZMARA~T | PRIMARY | 25      | MY2.T2.MANDT,const |    1 | Using where              |
+----+-------------+-------+--------+------------------------------------+---------+---------+--------------------+------+--------------------------+
3 rows in set (0.00 sec)
00 sec)

5.0.13-beta-log on 10.17.69.84
[07:59] root@MY2>EXPLAIN SELECT T1.* FROM SZMARA T1 JOIN SZMAKT T2 JOIN SZMVKE T3 WHERE T1.MANDT=T2.MANDT AND T1.MATNR=T2.MATNR AND T1.MANDT=T3.MANDT AND T1.MATNR=T3.MATNR AND T1.MATNR BETWEEN '000000000000001300' AND '000000000000001300' ;
+----+-------------+-------+------+------------------------------------+---------+---------+---------------------------+-------+--------------------------+
| id | select_type | table | type | possible_keys                      | key     | key_len | ref                       | rows  | Extra                    |
+----+-------------+-------+------+------------------------------------+---------+---------+---------------------------+-------+--------------------------+
|  1 | SIMPLE      | T1    | ALL  | PRIMARY,SZMARA~L,SZMARA~O,SZMARA~T | NULL    | NULL    | NULL                      | 10036 | Using where              |
|  1 | SIMPLE      | T3    | ref  | PRIMARY                            | PRIMARY | 25      | MY2.T1.MANDT,MY2.T1.MATNR |     1 | Using index              |
|  1 | SIMPLE      | T2    | ref  | PRIMARY,SZMAKT~M                   | PRIMARY | 25      | MY2.T3.MANDT,MY2.T1.MATNR |     1 | Using where; Using index |
+----+-------------+-------+------+------------------------------------+---------+---------+---------------------------+-------+--------------------------+
3 rows in set (0.00 sec)
[24 Sep 2005 6:08] Georg Richter
Table definition and data for bug #13455

Attachment: SQL.tar.bz2 (application/x-tbz, text), 144.16 KiB.

[24 Sep 2005 6:36] MySQL Verification Team
mysql> EXPLAIN SELECT T1.* FROM SZMARA T1 JOIN SZMAKT T2 JOIN SZMVKE T3 WHERE T1.MANDT=T2.MANDT AND T1.MATNR=T2.MATNR AND T1.MANDT=T3.MANDT AN
D T1.MATNR=T3.MATNR AND T1.MATNR='000000000000001300'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: T3
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 35
          ref: NULL
         rows: 7578
        Extra: Using where; Using index
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: T2
         type: ref
possible_keys: PRIMARY,SZMAKT~M
          key: PRIMARY
      key_len: 25
          ref: MY2.T3.MANDT,const
         rows: 1
        Extra: Using where; Using index
*************************** 3. row ***************************
           id: 1
  select_type: SIMPLE
        table: T1
         type: eq_ref
possible_keys: PRIMARY,SZMARA~L,SZMARA~O,SZMARA~T
          key: PRIMARY
      key_len: 25
          ref: MY2.T2.MANDT,const
         rows: 1
        Extra: Using where
3 rows in set (0.01 sec)

mysql> EXPLAIN SELECT T1.* FROM SZMARA T1 JOIN SZMAKT T2 JOIN SZMVKE
    -> T3 WHERE T1.MANDT=T2.MANDT AND T1.MATNR=T2.MATNR AND T1.MANDT=T3.MANDT AND
    -> T1.MATNR=T3.MATNR AND T1.MATNR BETWEEN '000000000000001300' AND
    -> '000000000000001300'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: T1
         type: ALL
possible_keys: PRIMARY,SZMARA~L,SZMARA~O,SZMARA~T
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10044
        Extra: Using where
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: T3
         type: ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 25
          ref: MY2.T1.MANDT,MY2.T1.MATNR
         rows: 1
        Extra: Using index
*************************** 3. row ***************************
           id: 1
  select_type: SIMPLE
        table: T2
         type: ref
possible_keys: PRIMARY,SZMAKT~M
          key: PRIMARY
      key_len: 25
          ref: MY2.T3.MANDT,MY2.T1.MATNR
         rows: 1
        Extra: Using where; Using index
3 rows in set (0.01 sec)

mysql> select version();
+-----------------+
| version()       |
+-----------------+
| 5.0.14-rc-debug |
+-----------------+
1 row in set (0.00 sec)

mysql>
[29 Sep 2005 3:26] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/internals/30480
[29 Sep 2005 3:55] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/internals/30482
[29 Sep 2005 21:31] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/internals/30525
[29 Sep 2005 22:57] Sergey Petrunya
Fix pushed into 5.0.14 tree. 
Fix description:
ref optimizer is now able to use "ref" access method for "t.key BETWEEN c1 AND c1" (where c1 is a constant) constructs.
[30 Sep 2005 3:03] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/internals/30536
[30 Sep 2005 18:58] Paul DuBois
Noted in 5.0.14 changelog.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.059 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.