J'ai 3 tables avec des connexions utilisateur:L'amélioration des performances dans cette requête
sis_login => administrateurs tb_rb_estrutura => coordinateurs tb_usuario => clients
Je créé en vue d'unir tous ces utilisateurs en les séparant par des niveaux, comme suit:
create view `login_names` as select `n1`.`cod_login` as `id`, '1' as `level`, `n1`.`nom_user` as `name` from `dados`.`sis_login` `n1`
union all
select `n2`.`id` as `id`, '2' as `level`, `n2`.`nom_funcionario` as `name` from `tb_rb_estrutura` `n2`
union all
select `n3`.`cod_usuario` as `id`, '3' as `level`, `n3`.`dsc_nome` as `name` from `tb_usuario` `n3`;
Alors, peut se produire jusqu'à trois ids répétées pour différents utilisateurs, ce qui est la raison pour laquelle je me suis séparé par niveaux. Cette vue est juste pour me renvoyer le nom d'utilisateur, en fonction de son identifiant et de son niveau. compte tenu qu'il a environ 500 000 utilisateurs enregistrés, cette vue prend environ 1 seconde à charger. trop de temps, mais devient très petit quand je dois retourner les derniers messages sur le forum de mon site.
Les tables des forums renvoient l'ID utilisateur et le niveau, puis recherchent un nom dans cette vue. J'ai enregistré 18 forums. Lorsque j'exécute la requête, cela prend une seconde pour chaque forum = 18 secondes. OMG. Cette page se charge chaque fois que quelqu'un entre sur mon site.
C'est ma requête:
select `x`.`forum_id`, `x`.`topic_id`, `l`.`nome`
from (
select `t`.`forum_id`, `t`.`topic_id`, `t`.`data`, `t`.`user_id`, `t`.`user_level`
from `tb_forum_topics` `t`
union all
select `a`.`forum_id`, `a`.`topic_id`, `a`.`data`, `a`.`user_id`, `a`.`user_level`
from `tb_forum_answers` `a`) `x`
left outer join `login_names` `l`
on `l`.`id` = `x`.`user_id` and `l`.`level` = `x`.`user_level`
group by `x`.`forum_id` asc
UTILISATION EXPLIQUER:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 6 Using temporary; Using filesort
1 PRIMARY <derived4> ALL NULL NULL NULL NULL 530415
4 DERIVED n1 ALL NULL NULL NULL NULL 114
5 UNION n2 ALL NULL NULL NULL NULL 2
6 UNION n3 ALL NULL NULL NULL NULL 530299
NULL UNION RESULTAT ALL NULL NULL NULL NULL NULL
2 DÉRIVÉS t ALL NULL NULL NULL NULL 3
3 UNION r ALL NULL NULL NULL NULL 3
NUL UNION RÉSULTAT TOTAL NULL NULL NULL NULL
Quelqu'un peut m'aider ou donner une suggestion?
Merci pour votre réponse. Malheureusement je ne peux pas changer la structure, puisque j'utilise des bases de données d'autres systèmes. Et je ne peux pas utiliser WHERE name = 'quel que soit' parce que le nom est ce dont j'ai besoin.La requête me renvoie: forum_id, topic_id, user_name du dernier post de chaque forum, alors je ne peux pas spécifier un nom :(Mais merci quand même –
Dans ce cas, je recommande d'utiliser ajax de préférence pour obtenir le dernier message de chaque forum individuellement De cette façon, il n'y a pas de temps d'attente pour que l'utilisateur puisse voir la page, il y a seulement un temps d'attente pour remplacer les données demandées. – evan
Encore merci, evan! =) Je l'ai fait comme suggestion. –