Som du har visat har MySQL två alternativa frågeplaner för frågor med ORDER BY ... LIMIT n
:
- Läs alla kvalificerade rader, sortera dem och välj n översta raderna.
- Läs raderna i sorterad ordning och sluta när n kvalificerande rader har hittats.
För att avgöra vilket som är det bästa alternativet måste optimeraren uppskatta filtreringseffekten av ditt WHERE-tillstånd. Detta är inte okomplicerat, särskilt för kolumner som inte är indexerade, eller för kolumner där värden är korrelerade. I ditt fall måste man förmodligen läsa mycket mer av tabellen i sorterad ordning för att hitta de första 25 kvalificerade raderna än vad optimeraren förväntade sig.
Det har skett flera förbättringar i hur LIMIT-frågor hanteras, både i senare versioner av 5.6 (du kör på en pre-GA-utgåva!), och i nyare versioner (5.7, 8.0). Jag föreslår att du försöker uppgradera till en senare version och se om detta fortfarande är ett problem.
I allmänhet, om du vill förstå frågeplanerarens beslut bör du titta på optimeringsspårningen för frågan.