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

Ottimizzazione delle query MySQL con operatore IN

L'indice su categoryId non aiuta in questo caso, le query IN (...) produrranno comunque la scansione della sequenza invece della ricerca dell'indice.

Considererei prima di tutto riprogettare il sistema per eliminare la selezione di più categorie e, se non è appropriato, memorizzare nella cache i risultati delle query.

Ad esempio, puoi creare una tabella di supporto items_category_groups(hash, item_id) e dopo la query del client su più categorie eseguire l'hashing dei loro ID combinati e cercare questa tabella. Se non viene trovato, fai una query costosa e riempi questa tabella. Se trovato, fai una query economica unendo queste tabelle. Funzioneranno anche altri strumenti di memorizzazione nella cache come memcached.