Details
Description
Test case:
--source include/have_innodb.inc CREATE TABLE t ( id int not null auto_increment, x int not null, primary key(id) )engine=innodb; insert into t (x) values(0),(0),(0); insert into t (x) select 0 from t as t1,t as t2; insert into t (x) select 0 from t as t1,t as t2; insert into t (x) select 0 from t as t1,t as t2; SELECT (SELECT MAX(id) - 1000 FROM t) INTO @a; FLUSH STATUS; SELECT x FROM t WHERE id > @a ORDER BY x LIMIT 1; SHOW STATUS LIKE 'handler_read%'; FLUSH STATUS; SELECT x FROM t WHERE id > (SELECT MAX(id) - 1000 FROM t) ORDER BY x LIMIT 1; SHOW STATUS LIKE 'handler_read%'; DROP TABLE t;
output on mariadb (tested 5.3.5, 5.5.28, 5.5.29 and 10.0.0):
mysql [localhost] {msandbox} (test) > SELECT x FROM t WHERE id > @a ORDER BY x LIMIT 1;
+---+
| x |
+---+
| 0 |
+---+
1 row in set (0.00 sec)
mysql [localhost] {msandbox} (test) > SHOW STATUS LIKE 'handler_read%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 1 |
| Handler_read_last | 0 |
| Handler_read_next | 1000 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_deleted | 0 |
| Handler_read_rnd_next | 0 |
+--------------------------+-------+
8 rows in set (0.00 sec)
mysql [localhost] {msandbox} (test) > FLUSH STATUS;
Query OK, 0 rows affected (0.00 sec)
mysql [localhost] {msandbox} (test) > SELECT x FROM t WHERE id > (SELECT MAX(id) - 1000 FROM t) ORDER BY x DESC LIMIT 1;
+---+
| x |
+-- +
| 0 |
+---+
1 row in set (0.00 sec)
mysql [localhost] {msandbox} (test) > SHOW STATUS LIKE 'handler_read%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 0 |
| Handler_read_last | 1 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_deleted | 0 |
| Handler_read_rnd_next | 24493 |
+--------------------------+-------+
output on mysql (tested 5.0 and 5.1):
mysql> SELECT x FROM t WHERE id > @a ORDER BY x LIMIT 1; +---+ | x | +---+ | 0 | +---+ 1 row in set (0.00 sec) mysql> SHOW STATUS LIKE 'handler_read%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Handler_read_first | 0 | | Handler_read_key | 3 | | Handler_read_next | 1000 | | 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> SELECT x FROM t WHERE id > (SELECT MAX(id) - 1000 FROM t) ORDER BY x LIMIT 1; +---+ | x | +---+ | 0 | +---+ 1 row in set (0.00 sec) mysql> SHOW STATUS LIKE 'handler_read%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Handler_read_first | 0 | | Handler_read_key | 5 | | Handler_read_next | 1000 | | Handler_read_prev | 0 | | Handler_read_rnd | 0 | | Handler_read_rnd_next | 0 | +-----------------------+-------+
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
forgot about explains:
mariadb:
{msandbox}mysql [localhost]
(test) > explain SELECT x FROM t WHERE id > (SELECT MAX(id) - 1000 FROM t) ORDER BY x DESC LIMIT 1;
-----
----------------------------------------------------------------------------------+-----
----------------------------------------------------------------------------------+-----
----------------------------------------------------------------------------------+mysql 5.1:
mysql> explain SELECT x FROM t WHERE id > (SELECT MAX(id) - 1000 FROM t) ORDER BY x LIMIT 1;
---
-------------------------------------------------------------------------------------+---
-------------------------------------------------------------------------------------+---
-------------------------------------------------------------------------------------+