Mysql
 sql >> Database >  >> RDS >> Mysql

Mescolando diversi risultati di categorie, ordinati per punteggio in MySQL

Vai a prendere i primi 20. Se non soddisfano i requisiti, fai una query aggiuntiva per ottenere i pezzi mancanti. Dovresti essere in grado di trovare un equilibrio tra il numero di query e il numero di righe che ciascuna restituisce.

Se hai ottenuto i primi 100, potrebbe soddisfare i requisiti il ​​90% delle volte e sarebbe più economico e veloce di 10 query separate.

Se fosse SQL Server potrei aiutare di più...

In realtà, ho un'altra idea. Esegui un processo ogni 5 minuti che calcola l'elenco e lo memorizza nella cache in una tabella. Rendi DML contro tabelle correlate invalida la cache in modo che non venga utilizzata fino a quando non viene ripopolata (forse un articolo è stato eliminato). Se la cache non è valida, tornerai a calcolarla al volo... E potresti comunque usarla per ripopolare la cache.

Potrebbe essere possibile aggiornare strategicamente l'elenco memorizzato nella cache anziché ricalcolarlo. Ma potrebbe essere una vera sfida.

Questo dovrebbe aiutare sia con la velocità delle query che con la riduzione del carico sul database. Non dovrebbe importare molto se l'elenco degli articoli è scaduto di 5 minuti. Diamine, anche 1 minuto potrebbe funzionare.