Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
select * from (select c.* from comments c ORDER BY id) v WHERE rownum BETWEEN 10000 and 10010
create table test_table ( id int(11), f int(11), key f(f), primary key (id));
insert into test_table set id=1, f = 1;
insert into test_table set id=2, f = 1;
insert into test_table set id=3, f = 1;
insert into test_table set id=4, f = 2;
insert into test_table set id=5, f = 2;
SELECT * FROM test_table WHERE f = 2 ORDER BY id LIMIT 1, 1;
SELECT * FROM test_table JOIN (SELECT id FROM test_table ORDER BY id LIMIT 1, 1) as b ON b.id = test_table.id WHERE f = 2 ;
Проблема заключается в том, что используя LIMIT 100000, 30 — mysql вначале пройдется по первым 100000 записям и только потом выберет нужные 30.
Избежать этого достаточно просто
select id from comments where post_id = 123 order by id limit 10000,30
Оптимизируем LIMIT offset