A few points.
1: count(*) is very expensive in some databases, such as postgresql. An approximation is often good enough, hence look into using statistics or something if you're running on pgsql.
2: How one database optimizes is not how another might do it. In fact, in mysql, how one table handler optimizes might be different from one to another.
3: Pagination can get very expensive if you're using limit / offset syntax as you get nearer to the end of the data set. Consider partitioning your data by id / date stamp whatever. MySQL doesn't support invisible under the hood partitioning, but rolling your own isn't that hard.
4: count(id) is NOT the same as count() in one big way. count() will count all rows, even ones that are nothing but nulls. count(id) will only count the ids that aren't null. normally this semantic difference doesn't matter. Just about the time you forget about this difference, it will. 🙂