Я думаю, что вы могли бы использовать что-то похожее на решение во второй ссылке, чтобы хотя бы повысить производительность, но я сомневаюсь, что вы сможете добиться высокой производительности на последующих страницах. Например:
( SELECT name, id
FROM _test1 -- conditions WHERE
ORDER BY name DESC LIMIT 0, 30
)
UNION ALL
( SELECT name, id
FROM _test2 -- conditions WHERE
ORDER BY name DESC LIMIT 0, 30
)
ORDER BY name DESC
LIMIT 10, 20
Вы в основном ограничиваете каждый подзапрос подмножеством возможных строк, которые могут быть на данной странице. Таким образом, вам нужно всего лишь извлечь и объединить 20 строк из каждой таблицы, прежде чем определять, какие 10 вернуть. В противном случае сервер потенциально получит все строки из каждой таблицы, упорядочит и объединит их, а затем попытается найти правильные строки.
Я не очень часто использую MySQL, поэтому не могу гарантировать, что движок будет работать так, как я думаю:)
В любом случае, когда вы перейдете на более поздние страницы, вы все равно собираетесь объединять все большие и большие наборы данных. ОДНАКО, я твердо убежден в том, что пользовательский интерфейс НИКОГДА не должен позволять пользователю получать набор записей, которые позволяют ему перейти (например, на страницу 5000). Это просто слишком много данных для человеческого разума, чтобы найти полезные сразу и должны требовать дальнейшей фильтрации. Возможно, пусть они увидят первые 100 страниц (или какое-то другое число), но в противном случае им придется ограничивать результаты лучше. Только мое мнение, хотя.