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

Jak optimalizovat databázi tento dotaz ve velké databázi?

Kromě primárního klíče nemáte žádné indexy. Musíte vytvořit index pro pole, která používáte v příkazu WHERE. Pokud potřebujete indexovat pouze 1 pole nebo kombinaci několika polí, závisí na ostatních SELECTech, které budete proti této tabulce spouštět.

Mějte na paměti, že REGEXP nemůže vůbec používat indexy, LIKE lze použít index pouze v případě, že nezačíná zástupným znakem (takže LIKE 'a%' můžete použít index, ale LIKE '%a' nelze), větší než / menší než (<>) obvykle také nepoužívejte indexy.

Zbývá vám tedy code a check pole. Předpokládám, že mnoho řádků bude mít stejnou hodnotu pro check , takže bych index začal code pole. Vícepolní indexy lze použít pouze v pořadí, v jakém jsou definovány...

Představte si index vytvořený pro pole code, check . Tento index lze použít ve vašem dotazu (kde klauzule WHERE obsahuje obě pole), také v dotazu pouze s code pole, ale ne v dotazu pouze s check pole.

Je důležité ORDER BY id ? Pokud ne, vynechejte to, zabrání to průchodu řazení a váš dotaz bude dokončen rychleji.



  1. SELECT DISTINCT ignoruje různé případy

  2. Jak aktualizovat velkou tabulku s miliony řádků v SQL Server?

  3. Oracle 11g – Zkontrolujte omezení pomocí RegEx

  4. Mysql Zvyšování proměnlivého výkonu