Overweeg het volgende, waar ik 2,2 miljoen rijen in een tabel forceer
Schema
create table tbl
( id int auto_increment primary key,
thing int not null
)engine=MyISAM;
insert tbl(thing) values (7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7),(7);
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
insert into tbl(thing) select thing from tbl;
De graven
select count(*) as theCount,max(id) as theMax,min(id) as thMin from tbl;
+----------+---------+-------+
| theCount | theMax | thMin |
+----------+---------+-------+
| 2228224 | 2228224 | 1 |
+----------+---------+-------+
Query A (de jouwe, gebruikt een afgeleide tabel)
explain
SELECT *
FROM `tbl`
JOIN
(SELECT id FROM `tbl` ORDER BY id LIMIT 1000000, 100) as b
on `b`.`id` = `tbl`.`id`;
+----+-------------+------------+--------+---------------+---------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+---------+---------+------+---------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 1000100 | NULL |
| 1 | PRIMARY | tbl | eq_ref | PRIMARY | PRIMARY | 4 | b.id | 1 | NULL |
| 2 | DERIVED | tbl | index | NULL | PRIMARY | 4 | NULL | 2228224 | Using index |
+----+-------------+------------+--------+---------------+---------+---------+------+---------+-------------+
Query B (geen afgeleide tabel)
explain
SELECT t1.*
FROM tbl t1
JOIN tbl t2
on t2.id = t1.id
where t2.id>1000000
limit 100
+----+-------------+-------+--------+---------------+---------+---------+--------------------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+--------------------+---------+--------------------------+
| 1 | SIMPLE | t2 | range | PRIMARY | PRIMARY | 4 | NULL | 1195836 | Using where; Using index |
| 1 | SIMPLE | t1 | eq_ref | PRIMARY | PRIMARY | 4 | so_gibberish.t2.id | 1 | NULL |
+----+-------------+-------+--------+---------------+---------+---------+--------------------+---------+--------------------------+
Voor degenen die niet bekend zijn met het gebruik van Explain
, zie een artikel dat ik hier
deed