когда вы запускаете оператор, mysql отправляет количество строк в заголовок. так что нет, запрос не перезапускается для подсчета.
это имеет интересное значение для запросов с LIMIT. mysql_num_rows () возвращает количество строк, возвращаемых после применения LIMIT. если вы используете ключевое слово SQL_CALC_FOUND_ROWS в своем операторе SELECT, mysql_num_rows () возвращает количество строк, которые были бы возвращены, если бы LIMIT не использовался. это полезно для подкачки.