Bonjour,
Tout d'abord, concernant ta question : "Comment font facebook, twitter, ebay, etc. ?".
Ce sont des entreprises dont tout tourne grace à leur(s) plateforme(s). Ils ont les moyens financiers pour avoir une quantité non négligeable de serveurs. Plusieurs milliers pour la plupart. Ceux-ci sont relativement puissant et ils ont mis en place un système de loadbalancing sur les serveurs HTTP, SQL et de fichiers. Arrivé à ce stade, plus de problèmes de performances vu que la quantité de RAM dépasse allégrment les 100 To et que le nombre de coeurs de procésseurs se compte en millier.
Dans ton cas, si les liaisons entre les tables sont 1 user <=> 1 usersettings, tu peux tout mettre sur la même table. Donc si tu as :
users hasOne usersettings et usersettings hasOne users pourquoi faire une jointure ? Ta base sera toujour moins volumineuse en mettant tout sur la même table quand créant deux tables plus petites. De plus ça te permet, lors du SELECT de ne charger qu'une table lors de la requete contre deux avec une liaison.
Un dernier point mais pas des moindres, si ton serveur est suffisament puissant pour gérer une base volumineuse de plusieurs millions/milliards de lignes tu n'alourdiras pas la charge en procédant ainsi. Après si ton SQL est sur un serveur avec un intel celeron mono coeur... la c'est pas garanti. Enfin tout dépend du moteur SQL qui est derrière. La plus part des moteur SQL "recent" fonctionne en multi thread ce qui accélère grandement la vitesse de traitement.
En espérant t'avoir été utile.