Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mélanger les résultats de différentes catégories, classés par score dans MySQL

Allez chercher le top 20. S'ils ne satisfont pas aux exigences, faites une requête supplémentaire pour obtenir les pièces manquantes. Vous devriez être en mesure de trouver un équilibre entre le nombre de requêtes et le nombre de lignes renvoyées par chacune.

Si vous obtenez le top 100, cela pourrait satisfaire les exigences 90 % du temps et serait moins cher et plus rapide que 10 requêtes distinctes.

Si c'était SQL Server, je pourrais aider plus...

En fait, j'ai une autre idée. Exécutez un processus toutes les 5 minutes qui calcule la liste et la met en cache dans une table. Faire en sorte que DML contre les tables liées invalide le cache afin qu'il ne soit pas utilisé jusqu'à ce qu'il soit repeuplé (peut-être qu'un article a été supprimé). Si le cache n'est pas valide, vous vous rabattriez sur le calcul à la volée... Et pourriez l'utiliser pour repeupler le cache de toute façon.

Il pourrait être possible de mettre à jour stratégiquement la liste mise en cache plutôt que de la recalculer. Mais cela pourrait être un vrai défi.

Cela devrait aider à la fois à accélérer la requête et à réduire la charge sur votre base de données. Cela ne devrait pas avoir beaucoup d'importance si votre liste d'articles est dépassée de 5 minutes. Heck, même 1 minute peut fonctionner.