SQL_CALC_FOUND_ROWS
полезно только в том случае, если вы используете предложение LIMIT
, но хотите узнать, сколько строк было бы найдено без LIMIT
.
Подумайте, как это работает:
SELECT SQL_CALC_FOUND_ROWS * FROM Users;
Вы заставляете базу данных извлекать / анализировать ВСЕ данные в таблице, а затем выбрасываете их. Даже если вы не собираетесь извлекать какие-либо строки, сервер БД все равно начнет извлекать фактические данные с диска при условии, что вам понадобятся эти данные.
С человеческой точки зрения, вы купили все содержимое супермаркета, но выбросили все, кроме пачки жевательной резинки, в кассу.
Принимая во внимание, что:
SELECT count(*) FROM users;
позволяет механизму БД знать, что, хотя вы хотите знать, сколько строк, вы не должны заботиться о реальных данных. На большинстве любых интеллектуальных СУБД механизм может получить этот счетчик из метаданных таблицы или просто прогнать индекс первичного ключа таблицы, даже не затрагивая данные строки на диске.