sql >> Database >  >> RDS >> Mysql

Index gebruiken, tijdelijk gebruiken, filesort gebruiken - hoe dit op te lossen?

Nou, het document geeft de exacte redenen wanneer "Tijdelijk gebruiken" zal verschijnen:

Tijdelijke tabellen kunnen worden aangemaakt onder de volgende voorwaarden:

Als er een ORDER BY-clausule en een andere GROUP BY-clausule is, of als de ORDER BY of GROUP BY kolommen bevat uit andere tabellen dan de eerste tabel in de join-wachtrij, wordt een tijdelijke tabel gemaakt.

DISTINCT gecombineerd met ORDER BY kan een tijdelijke tafel vereisen.

Als u de optie SQL_SMALL_RESULT gebruikt, gebruikt MySQL een tijdelijke tabel in het geheugen, tenzij de query ook elementen bevat (later beschreven) die opslag op schijf vereisen.

Een snelle scan laat zien dat je last hebt van #1.

En deze blog uit 2009 zegt dat "het gebruik van filesort" betekent dat de sortering niet kan worden uitgevoerd met een index. Aangezien je bestelt op basis van een berekend veld, zal dat ook waar zijn.

Dus dat is wat "fout" is.



  1. Basisprincipes van MariaDB Server-databaseversleuteling

  2. Meerdere databases tegelijk opvragen

  3. INSERT gebruiken met een PostgreSQL-database met Python

  4. SSMS 2016-fout bij het importeren van Azure SQL v12 bacpac:hoofdsleutels zonder wachtwoord niet ondersteund