Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Optimieren von MySQL-Abfragen mit dem IN-Operator

Der Index auf categoryId hilft in diesem Fall nicht, IN (...) Abfragen erzeugen sowieso einen Sequenzscan anstelle einer Indexsuche.

Ich würde zuerst in Betracht ziehen, das System umzugestalten, um die Auswahl mehrerer Kategorien loszuwerden, und falls dies nicht angemessen ist, die Abfrageergebnisse zwischenzuspeichern.

Beispielsweise können Sie eine Hilfstabelle items_category_groups(hash, item_id) erstellen und nach einer Clientabfrage für mehrere Kategorien ihre kombinierten IDs hashen und diese Tabelle nachschlagen. Falls nicht gefunden, führen Sie eine aufwändige Abfrage durch und füllen Sie diese Tabelle aus. Wenn gefunden, führen Sie eine billige Abfrage durch, die diese Tabellen verbindet. Andere Caching-Tools wie memcached funktionieren auch.