Money dans la table user est le solde de l'utilisateur, et s_money dans la table stream est le flux généré par l'utilisateur. Théoriquement SUM(s_money) == money, en supposant qu'une panne se produise, comment connaître les différentes données du tableau ? Comme le montre la figure ci-dessous, l'utilisateur avec ID=3.
Supplément : Vous devez connaître les informations du tableau des utilisateurs et le chiffre d'affaires total de l'utilisateur
Comme
Essayez d'interroger les tables d'utilisateur et de flux séparément et trouvez la différence définie via array_diff_assoc. Mais l'efficacité est relativement faible.
La table utilisateur mesurée contient 23 434 éléments de données et la table de flux contient 361 024 éléments de données. Cela prend un total de 3,5 s à 4 s. Existe-t-il une méthode plus efficace ?
table des utilisateurs :
tableau de flux :
Actuellement, l'ID utilisateur est indexé et les performances ont augmenté plusieurs fois. Le temps de requête réel est inférieur à 0,3 s.
L'environnement en ligne n'a pas été testé, donc je ne sais pas s'il peut être utilisé
sélectionnez t1.id,t1.name,t1.money,t2.s_money de l'utilisateur t1,(select userID,sum(s_money) s_money du groupe de flux par userID) t2 où t1.id=t2.userid;
Peut établir un union L'effet d'indexation sera meilleur : créez l'index INX_stream_us sur stream (user_id,s_money);