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

kompleks forespørgsel tager for lang tid at overføre

Du skal bruge et sammensat indeks på skæringstabellen:

ALTER TABLE instruments_tools ADD KEY (id_instrument, id_tool);

Rækkefølgen af ​​kolonner i det indeks er vigtig!

Det du håber på er, at sammenføjningerne starter med instrumenttabellen, og slå derefter den matchende indeksindgang op i det sammensatte indeks baseret på id_instrument. Så når den finder den indeksindgang, har den det relaterede id_tool gratis. Så den behøver slet ikke at læse tabellen instrument_tools, den behøver kun at læse indeksindgangen. Det skulle give "Using index"-kommentaren i din EXPLAIN til tabellen instruments_tools.

Det burde hjælpe, men du kan ikke undgå den midlertidige tabel og filsortering, da de kolonner, du grupperer efter og sorterer efter, ikke kan bruge et indeks.

Du kan prøve at få MySQL til at undgå at skrive den midlertidige tabel til disken ved at øge størrelsen af ​​hukommelsen, den kan bruge til midlertidige tabeller:

mysql> SET GLOBAL tmp_table_size = 256*1024*1024;      -- 256MB
mysql> SET GLOBAL max_heap_table_size = 256*1024*1024; -- 256MB

Det tal er blot et eksempel. Jeg aner ikke, hvor stor den skal være til vikarbordet i dit tilfælde.




  1. Lav en sha1-hash af en række i Oracle

  2. Påvirker antallet af kolonner MYSQL-hastigheden?

  3. MySQL Group fra kvartaler til perioder

  4. Bekræft databaseforbindelsen med pg-promise, når du starter en app