Normalt opdeles data ved shards på en måde, der gør det muligt overhovedet at undgå JOINS på tværs af servere. Fordi denne operation er svær og dyr. Hvis dit eksempel er hypotetisk, vil jeg anbefale at dividere alle data efter user_id felt eller user_group_id.
For eksempel vil shard A indeholde alle tabeller med information fra brugere, som bruger_id % 3 =0, shard B - hvilket bruger_id % 3 =1, shard C - hvilket bruger_id % 3 =2. Så de fleste nødvendige JOINS vil være inde i et shard. For nogle komplekse cross-server-forespørgsler kan du have fælles NO-SQL-lagring som memcached eller Redis, som vil have kopier af nødvendige data fra alle shards (selvfølgelig er det ikke en fuld kopi af alle tabeller). Sådanne lagerpladser kan nemt replikeres på lige så mange servere, som du har brug for. Sådan fungerer højbelastningsprojekter.