Shard by a key that's present in almost every query and spreads load evenly — usually a hashed user_id — then plan for resharding and cross-shard queries from day one. 1B users won't fit or perform on one node; you split rows across many databases and route each query to the shard that owns it.
┌──────────────┐
Request ─▶ Router/│ shard_of(key)│─▶ Shard 0 (users 0–…)
Proxy └──────────────┘ Shard 1
(Vitess) │ Shard 2
└─────────▶ Shard N ← each = its own primary+replicas
Directory/lookup table (which key → which shard) ── for range or resharding
