IMHO, причина, по которой 2 запроса
SELECT * FROM count_test WHERE b = 666 ORDER BY c LIMIT 5;
SELECT count(*) FROM count_test WHERE b = 666;
быстрее, чем использование SQL_CALC_FOUND_ROWS
SELECT SQL_CALC_FOUND_ROWS * FROM count_test WHERE b = 555 ORDER BY c LIMIT 5;
, следует рассматривать как частный случай.
Это в фактах зависит от избирательности предложения WHERE по сравнению с селективностью неявного, эквивалентного ORDER + LIMIT.
Как сказал Arvids в комментарии ( http: //www.mysqlperformanceblog .com / 2007/08/28 / to-sql_calc_found_rows-or-not-to-sql_calc_found_rows / # comment-1174394 ), тот факт, что EXPLAIN использует или нет временную таблицу, должен быть хорошей базой для того, чтобы узнать, будет ли SCFR быстрее или нет.
Но, как я добавил ( http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not- to-sql_calc_found_rows / # comment-8166482 ), результат действительно действительно зависит от случая. Для конкретного paginator вы можете прийти к выводу, что «для 3-х первых страниц используйте 2 запроса; для следующих страниц используйте SCFR "!