One user to millions: connection pooling, read replicas, caching, partitioning, sharding — in that order.
Scale in the cheapest order — indexes, connection pool, read replicas, cache, partitioning, sharding — because each step buys capacity by adding a problem, and skipping to sharding is adding the biggest problem first.