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

Brug af indeks, brug af midlertidig, ved hjælp af filersortering - hvordan løser man dette?

Nå, dokumentet angiver de nøjagtige årsager til, hvornår "Bruger midlertidig" vises:

Midlertidige tabeller kan oprettes under forhold som disse:

Hvis der er en ORDER BY-klausul og en anden GROUP BY-klausul, eller hvis ORDER BY eller GROUP BY indeholder kolonner fra andre tabeller end den første tabel i join-køen, oprettes en midlertidig tabel.

DISTINCT kombineret med ORDER BY kan kræve en midlertidig tabel.

Hvis du bruger indstillingen SQL_SMALL_RESULT, bruger MySQL en in-memorytemporary tabel, medmindre forespørgslen også indeholder elementer (beskrevet senere), som kræver lagerplads på disken.

En hurtig scanning viser, at du lider af #1.

Og denne blog fra 2009 siger, at "using filesort" betyder, at sorteringen ikke kan udføres med et indeks. Da du bestiller efter et beregnet felt, vil det også være sandt.

Så det er det, der er "forkert".



  1. Hvad er forskellen mellem RANK og DENSE_RANK i SQL?

  2. SQL 'LIKE'-forespørgsel ved hjælp af '%', hvor søgekriteriet indeholder '%'

  3. Planetarisk justering

  4. Sådan gør du dine adgangsdatabaser ultrahurtige!