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

Optimiser les requêtes MySQL avec l'opérateur IN

L'index sur categoryId n'aidera pas dans ce cas, les requêtes IN (...) produiront de toute façon un balayage de séquence au lieu d'une recherche d'index.

J'envisagerais d'abord de reconcevoir le système pour supprimer la sélection de plusieurs catégories et, si ce n'est pas approprié, de mettre en cache les résultats des requêtes.

Par exemple, vous pouvez créer une table d'assistance items_category_groups(hash, item_id) et après la requête du client sur plusieurs catégories, hacher leurs identifiants combinés et rechercher cette table. S'il n'est pas trouvé, faites une requête coûteuse et remplissez ce tableau. Si trouvé, faites une requête bon marché en joignant ces tables. D'autres outils de mise en cache comme memcached fonctionneront également.