Bug #30733 | Using where is shown in EXPLAIN output when there is no condition pushdown. | ||
---|---|---|---|
Submitted: | 30 Aug 2007 19:36 | Modified: | 17 Jun 2019 11:16 |
Reporter: | Tobias Asplund | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S3 (Non-critical) |
Version: | 5.1.20, 5.0.45, 4.1 BK | OS: | Linux |
Assigned to: | CPU Architecture: | Any |
[30 Aug 2007 19:36]
Tobias Asplund
[31 Aug 2007 11:01]
Sveta Smirnova
Thank you for the report. Verified as described.
[2 Nov 2007 8:29]
terry tao
when using index,if the mysql find the table is const,it will use the index only,otherwise the where condition is involved? Verified as on version 5.1.23. mysql> show variables like 'version'; +---------------+-----------------------+ | Variable_name | Value | +---------------+-----------------------+ | version | 5.1.23-beta-debug-log | +---------------+-----------------------+ mysql> drop tables t1; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE t1 ( a INT,index (a) ) ENGINE = MyISAM; Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO t1 VALUES (1), (2), (3), (4); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> explain select * from t1 where a=2 \G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: ref possible_keys: a key: a key_len: 5 ref: const rows: 1 Extra: Using where; Using index 1 row in set (0.04 sec) mysql> drop tables t1; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE t1 ( a INT,unique index (a) ) ENGINE = MyISAM; Query OK, 0 rows affected (0.31 sec) mysql> INSERT INTO t1 VALUES (1), (2), (3), (4); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> explain select * from t1 where a=2 \G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: const possible_keys: a key: a key_len: 5 ref: const rows: 1 Extra: Using index 1 row in set (0.03 sec) mysql> CREATE TABLE t1 ( a INT,primary key (a) ) ENGINE = MyISAM; Query OK, 0 rows affected (0.08 sec) mysql> INSERT INTO t1 VALUES (1), (2), (3), (4); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> explain select * from t1 where a=2 \G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: const possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: const rows: 1 Extra: Using index 1 row in set (0.04 sec) ERROR: No query specified mysql> explain select * from t1 where a=2 or a=3 \G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: index possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: NULL rows: 4 Extra: Using where; Using index 1 row in set (0.00 sec)
[22 Sep 2008 14:48]
Tobias Asplund
It also seems to show this in error on a prefix-column search on a composite index: mysql> show create table CountryLanguage \G *************************** 1. row *************************** Table: CountryLanguage Create Table: CREATE TABLE `CountryLanguage` ( `CountryCode` char(3) NOT NULL DEFAULT '', `Language` char(30) NOT NULL DEFAULT '', `IsOfficial` enum('T','F') NOT NULL DEFAULT 'F', `Percentage` float(4,1) NOT NULL DEFAULT '0.0', PRIMARY KEY (`CountryCode`,`Language`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) mysql> EXPLAIN SELECT * FROM CountryLanguage WHERE CountryCode = 'SWE' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: CountryLanguage type: ref possible_keys: PRIMARY key: PRIMARY key_len: 3 ref: const rows: 6 Extra: Using where 1 row in set (0.00 sec) Since the first key-part should be able to find all rows matching the WHERE criteria I would expect "Using where" not to show up here.
[16 Jun 2019 5:09]
Øystein Grøvlen
I think this bug can be closed. These queries no longer show "Using where" in EXPLAIN: mysql> EXPLAIN SELECT * FROM CountryLanguage WHERE CountryCode = 'SWE' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: CountryLanguage partitions: NULL type: ref possible_keys: PRIMARY,CountryCode key: PRIMARY key_len: 3 ref: const rows: 6 filtered: 100.00 Extra: NULL 1 row in set, 1 warning (0.00 sec) mysql> EXPLAIN SELECT * FROM t1 WHERE a = 2 \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 partitions: NULL type: ref possible_keys: a key: a key_len: 5 ref: const rows: 1 filtered: 100.00 Extra: Using index 1 row in set, 1 warning (0.00 sec)
[16 Jun 2019 5:10]
Øystein Grøvlen
Version tested was MySQL 8.0.16, by the way.
[17 Jun 2019 11:16]
Norvald Ryeng
Posted by developer: Exists in 5.5 and older. Fixed in 5.6 (I haven't checked exactly which 5.6 version) and newer.