Faça sharding por uma chave que esteja presente em quase toda consulta e distribua a carga uniformemente — geralmente um user_id hasheado — e depois planeje resharding e consultas cross-shard desde o primeiro dia. 1B de usuários não cabe nem tem performance em um único nó; você divide as linhas por vários bancos e roteia cada consulta para o shard que a possui.
┌──────────────┐
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
