MySQL не может перейти непосредственно к 10000-й записи (или 80000-й байт, как вы предлагаете), потому что он не может предположить, что он упакован / упорядочен как этот (или что он имеет непрерывные значения от 1 до 10000). Хотя это может быть и так на самом деле, MySQL не может предположить, что нет дыр / пробелов / удаленных идентификаторов.
Итак, как отмечали бобы, MySQL должен будет получить 10000 строк (или пройти через 10000-й записи индекс на id
), прежде чем найти 30 для возврата.
EDIT: Чтобы проиллюстрировать мою точку
Обратите внимание, что хотя
SELECT * FROM large ORDER BY id LIMIT 10000, 30
будет slow (er) ,
SELECT * FROM large WHERE id > 10000 ORDER BY id LIMIT 30
будет fast (er) и будет возвращать те же результаты при условии отсутствия отсутствующих id
s (т. е. пробелов).
Вы не можете одновременно читать и записывать один и тот же файл, поскольку он блокируется, когда вы читаете его. Вы можете прочитать весь файл в память и затем обработать его, а после обработки вы можете записать его обратно.