Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Misturando resultados de diferentes categorias, ordenados por pontuação no MySQL


Vá buscar os 20 primeiros. Se eles não atenderem aos requisitos, faça uma consulta adicional para obter as peças que faltam. Você deve ser capaz de encontrar algum equilíbrio entre o número de consultas e o número de linhas que cada uma retorna.

Se você obtiver o top 100, ele pode satisfazer os requisitos em 90% das vezes e seria mais barato e mais rápido do que 10 consultas separadas.

Se fosse SQL Server eu poderia ajudar mais...

Na verdade, tenho outra ideia. Execute um processo a cada 5 minutos que calcula a lista e a armazena em cache em uma tabela. Fazer o DML contra tabelas relacionadas invalidar o cache para que ele não seja usado até que seja preenchido novamente (talvez um artigo tenha sido excluído). Se o cache for inválido, você voltaria a calculá-lo na hora... E poderia usar isso para repovoar o cache de qualquer maneira.

Pode ser possível atualizar estrategicamente a lista em cache em vez de recalcular. Mas isso pode ser um verdadeiro desafio.

Isso deve ajudar na velocidade da consulta e na redução da carga em seu banco de dados. Não deve importar muito se sua lista de artigos estiver 5 minutos desatualizada. Heck, mesmo 1 minuto pode funcionar.