| Bug #24156 | Loose index scan not used with CREATE TABLE ...SELECT and similar statements | ||
|---|---|---|---|
| Submitted: | 9 Nov 2006 21:59 | Modified: | 14 Dec 2006 4:26 |
| Reporter: | Harrison Fisk | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S5 (Performance) |
| Version: | 5.0.30-BK, 5.0.28 | OS: | Linux (Linux, Mac OS X) |
| Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
| Tags: | backport_050030SP1 | ||
[9 Nov 2006 21:59]
Harrison Fisk
[10 Nov 2006 10:52]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.0.30-BK on Linux:
openxs@suse:~/dbs/5.0> bin/mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.30-debug Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE bug_test (a INT, b INT, INDEX (a,b));
INSERT INTO bug_test (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),(2, 2),
(2,3), (2,1), (3,1Query OK, 0 rows affected (0.22 sec)
mysql> INSERT INTO bug_test (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),(2,
2),
-> (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
Query OK, 15 rows affected (0.01 sec)
Records: 15 Duplicates: 0 Warnings: 0
mysql> EXPLAIN SELECT max(b), a FROM bug_test GROUP BY a\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: bug_test
type: range
possible_keys: NULL
key: a
key_len: 5
ref: NULL
rows: 8
Extra: Using index for group-by
1 row in set (0.00 sec)
mysql> FLUSH STATUS;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT max(b), a FROM bug_test GROUP BY a;
+--------+------+
| max(b) | a |
+--------+------+
| 5 | 1 |
| 3 | 2 |
| 1 | 3 |
| 6 | 4 |
+--------+------+
4 rows in set (0.00 sec)
mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 1 |
| Handler_read_key | 8 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
+-----------------------+-------+
6 rows in set (0.00 sec)
mysql> FLUSH STATUS;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t_2 SELECT max(b), a FROM bug_test GROUP BY a;
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 1 |
| Handler_read_key | 0 |
| Handler_read_next | 15 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
+-----------------------+-------+
6 rows in set (0.01 sec)
mysql> FLUSH STATUS;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM (SELECT max(b), a FROM bug_test GROUP BY a) b;
+--------+------+
| max(b) | a |
+--------+------+
| 5 | 1 |
| 3 | 2 |
| 1 | 3 |
| 6 | 4 |
+--------+------+
4 rows in set (0.00 sec)
mysql> SHOW STATUS LIKE 'handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 1 |
| Handler_read_key | 0 |
| Handler_read_next | 15 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 5 |
+-----------------------+-------+
6 rows in set (0.01 sec)
[17 Nov 2006 15:23]
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/commits/15502 ChangeSet@1.2314, 2006-11-17 17:21:55+02:00, gkodinov@macbook.gmz +3 -0 Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar statements Trying loose index scan is currently enabled only for top level SELECT statements. Extend loose index scan applicability by : - trying over the current subselect (lex->current_select) instead of the whole query (lex->select_lex) : enables loose index scan for sub-queries. - allowing non-select statements with SELECT parts (like, e.g. CREATE TABLE .. SELECT ...) to use loose index scan.
[28 Nov 2006 11:59]
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/commits/15941 ChangeSet@1.2314, 2006-11-28 13:57:04+02:00, gkodinov@macbook.gmz +3 -0 Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar statements Currently the optimizer evaluates loose index scan only for top-level SELECT statements Extend loose index scan applicability by : - Test the applicability of loose scan for each sub-select, instead of the whole query. This change enables loose index scan for sub-queries. - allow non-select statements with SELECT parts (like, e.g. CREATE TABLE .. SELECT ...) to use loose index scan.
[28 Nov 2006 16:12]
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/commits/15980 ChangeSet@1.2314, 2006-11-28 18:06:47+02:00, gkodinov@macbook.gmz +3 -0 Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar statements Currently the optimizer evaluates loose index scan only for top-level SELECT statements Extend loose index scan applicability by : - Test the applicability of loose scan for each sub-select, instead of the whole query. This change enables loose index scan for sub-queries. - allow non-select statements with SELECT parts (like, e.g. CREATE TABLE .. SELECT ...) to use loose index scan.
[1 Dec 2006 9:35]
Georgi Kodinov
Pushed in 5.0.32/5.1.14-beta
[14 Dec 2006 4:26]
Jon Stephens
Thank you for your bug report. This issue has been committed to our source repository of that product and will be incorporated into the next release.
If necessary, you can access the source repository and build the latest available version, including the bug fix. More information about accessing the source trees is available at
http://dev.mysql.com/doc/en/installing-source.html
Documented bugfix for 5.0.32 and 5.1.14.
[22 Dec 2006 1:12]
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/commits/17295 ChangeSet@1.2311, 2006-12-22 02:11:49+01:00, msvensson@neptunus.(none) +3 -0 Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar statements Currently the optimizer evaluates loose index scan only for top-level SELECT statements Extend loose index scan applicability by : - Test the applicability of loose scan for each sub-select, instead of the whole query. This change enables loose index scan for sub-queries. - allow non-select statements with SELECT parts (like, e.g. CREATE TABLE .. SELECT ...) to use loose index scan.
