sql >> Databasteknik >  >> RDS >> Mysql

Använda index, använda temporärt, använda filesort - hur fixar man detta?

Nåväl, dokumentet ger de exakta skälen till när "Använder temporärt" kommer att visas:

Tillfälliga tabeller kan skapas under förhållanden som dessa:

Om det finns en ORDER BY-sats och en annan GROUP BY-sats, eller om ORDER BY eller GROUP BY innehåller kolumner från andra tabeller än den första tabellen i join-kön, skapas en temporär tabell.

DISTINCT kombinerat med ORDER BY kan kräva en tillfällig tabell.

Om du använder alternativet SQL_SMALL_RESULT använder MySQL en in-memorytemporary tabell, såvida inte frågan också innehåller element (beskrivs senare) som kräver lagring på disken.

En snabb skanning visar att du lider av #1.

Och denna blogg från 2009 säger att "using filesort" betyder att sorteringen inte kan utföras med ett index. Eftersom du beställer efter ett beräknat fält, kommer det att vara sant också.

Så det är det som är "fel".



  1. Hur tar man bort dubbletter från kommaseparerad lista med regex i Oracle men jag vill inte ha dubblettervärden?

  2. Hur har man fullständig offlinefunktionalitet i en webbapp med PostgreSQL-databas?

  3. Hur Sinh() fungerar i PostgreSQL

  4. Hur man hanterar fel i SQL Server-kapslade transaktioner