| Bug #67631 | Subquery in view works slower than if run without view | ||
|---|---|---|---|
| Submitted: | 19 Nov 2012 11:52 | Modified: | 9 Mar 2015 19:03 |
| Reporter: | Sveta Smirnova | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
| Version: | 5.0.97, 5.1.67, 5.5.29, 5.7.0 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[19 Nov 2012 11:52]
Sveta Smirnova
[19 Nov 2012 11:54]
Sveta Smirnova
Explain for select from view:
mysql [localhost] {msandbox} (test) > explain extended SELECT * FROM C LIMIT 0, 30;
+----+--------------------+------------+-------+---------------+---------+---------+------+--------+-----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+------------+-------+---------------+---------+---------+------+--------+-----------+-------------+
| 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 140140 | 100.00 | |
| 2 | DERIVED | A | ALL | NULL | NULL | NULL | NULL | 140140 | 100.00 | |
| 3 | DEPENDENT SUBQUERY | t1 | index | PRIMARY | PRIMARY | 4 | NULL | 1 | 739000.00 | Using where |
+----+--------------------+------------+-------+---------------+---------+---------+------+--------+-----------+-------------+
3 rows in set, 2 warnings (39 min 32.48 sec)
Note (Code 1276): Field or reference 'test.A.id' of SELECT #3 was resolved in SELECT #2
Note (Code 1003): select `C`.`id` AS `id`,`C`.`v1` AS `v1`,`C`.`v2m` AS `v2m` from `test`.`C` limit 0,30
mysql> show status like 'Handler%';
+----------------------------+-----------+
| Variable_name | Value |
+----------------------------+-----------+
...
| Handler_read_prev | 586832829 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 183832 |
...
| Handler_write | 183831 |
+----------------------------+-----------+
15 rows in set (0.00 sec)
This status is for EXPLAIN in version 5.5.
And, finally, show status like 'Handler%'; for a query without view:
| Handler_read_prev | 221630 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 30 |
[19 Nov 2012 11:54]
Sveta Smirnova
Workaround:
create view C (id, v1, v2m) as
SELECT A.id,
A.v1,
(SELECT v2 FROM B WHERE B.id<=A.id ORDER BY B.id DESC LIMIT 1) as v2m
FROM A
LIMIT 0, 30
[19 Nov 2012 11:56]
Sveta Smirnova
database dump
Attachment: asdasd.sql.gz (application/x-gzip, text), 405.53 KiB.
[9 Mar 2015 19:03]
Roy Lyseng
Fixed in 5.7.7
