Еще раз - если надо выбрать 4 последние записи из 600, то надо просто сделать LIMIT 596, 4
, но если вам так уж необходимо именно через подзапрос сделать, тогда вот вам вариант:
SELECT *
FROM `table_name`
INNER JOIN (
SELECT id
FROM `table_name`
ORDER BY DESC id LIMIT 600
) as t
USING (id)
ORDER BY id ASC
LIMIT 4
В таком случае внутренний select будет работать с индексом, т.е. очень быстро выберет id и по нему опять применит индекс для того, чтобы выбрать записи из исходной таблицы.
Здесь можете сравнить планы выполнения трех способов. Привел примеры несколько измененных запросов, чтобы мои запросы отображали тот же результат, что и запрос тов. @argamidon. Обратите внимание на количество затронутых строк и тип доступа к таблицам