Ответ 1
К счастью, с MySQL 4.0.0 вы можете использовать параметр SQL_CALC_FOUND_ROWS в своем запросе, который подскажет MySQL подсчитать общее количество строк без учета предложения LIMIT. Вам все равно нужно выполнить второй запрос, чтобы получить количество строк, но это простой запрос, а не такой сложный, как ваш запрос, который извлекал данные. Использование довольно простое. В главном запросе вам нужно добавить параметр SQL_CALC_FOUND_ROWS сразу после SELECT, а во втором запросе вам нужно использовать функцию FOUND_ROWS(), чтобы получить общее количество строк. Запросы будут выглядеть так:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
Единственное ограничение заключается в том, что вы должны вызывать второй запрос сразу после первого, потому что SQL_CALC_FOUND_ROWS не сохраняет число строк в любом месте. Хотя это решение также требует двух запросов намного быстрее, так как вы выполняете основной запрос только один раз. Вы можете больше узнать о SQL_CALC_FOUND_ROWS и FOUND_ROWS() в документах MySQL.
EDIT: Следует отметить, что в большинстве случаев выполнение запроса дважды выполняется быстрее, чем SQL_CALC_FOUND_ROWS. см. здесь