sql >> Databáze >  >> RDS >> Mysql

Optimalizace MySQL dotazů s operátorem IN

Index na categoryId v tomto případě nepomůže, dotazy IN (...) stejně provedou sekvenční skenování namísto vyhledávání indexu.

Nejprve bych zvážil přepracování systému, abych se zbavil výběru více kategorií, a pokud to není vhodné, ukládání výsledků dotazů do mezipaměti.

Můžete například vytvořit pomocnou tabulku items_category_groups(hash, item_id) a po dotazu klienta na více kategorií hashovat jejich kombinovaná id a vyhledat tuto tabulku. Pokud nenaleznete, proveďte drahý dotaz a vyplňte tuto tabulku. Pokud najdete, proveďte levný dotaz spojením těchto tabulek. Ostatní nástroje pro ukládání do mezipaměti, jako je memcached, budou také fungovat.




  1. Velmi specifický MySQL dotaz, který chci zlepšit

  2. Připojení Delphi k Salesforce.com

  3. Údaje o penězích na PostgreSQL pomocí Javy

  4. Po extrahování DDL pomocí skriptu ksh chybí středník