Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
tenho que fazer uma consulta em uma tabela que possui atualmente cerca de 250 mil registros (usuários) com a seguinte situação.
Quero trazer os 10 usuários com a maior média nas notas.
Tenho uma tabela usuario e uma avaliacao.
Na tabela usuario quero trazer os valores do id_usuario e nome_completo.
Na tabela avaliacao tenho notas de usuários, comentários, etc. Identifico o registro pelo campo id_tabela e tabela.
Já tentei da seguinte forma:
SELECT u.id_usuario, u.nome_completo, AVG(a.nota) AS media
FROM usuario u
LEFT JOIN avaliacao a ON a.tabela = 'usuario' AND a.id_tabela = u.id_usuario
WHERE u.status = 1
GROUP BY u.id_usuario
ORDER BY media DESC
LIMIT 0, 10
---
Outra coisa que tentei foi criar uma VIEW com essas 3 informações e quando eu preciso faço um select simples:
SELECT id_usuario, nome_completo, media
FROM usuario_view
ORDER BY media DESC
LIMIT 0, 10
---
Das duas formas está demorando muito para me retornar.
Alguém poderia me dizer se tenho outra forma de fazer isso ou otimizar a maneira como eu fiz.
Obrigado!
Carregando comentários...