Come hai mostrato, MySQL ha due piani di query alternativi per le query con ORDER BY ... LIMIT n
:
- Leggi tutte le righe valide, ordinale e seleziona n righe in alto.
- Leggi le righe in ordine e interrompi quando n sono state trovate righe qualificanti.
Per decidere quale sia l'opzione migliore, l'ottimizzatore deve stimare l'effetto di filtraggio della tua condizione WHERE. Questo non è semplice, soprattutto per le colonne non indicizzate o per le colonne in cui i valori sono correlati. Nel tuo caso, probabilmente è necessario leggere molto di più della tabella in ordine per trovare le prime 25 righe di qualificazione rispetto a quanto previsto dall'ottimizzatore.
Sono stati apportati diversi miglioramenti al modo in cui vengono gestite le query LIMIT, sia nelle versioni successive della 5.6 (in esecuzione su una versione precedente a GA!), sia nelle versioni più recenti (5.7, 8.0). Ti suggerisco di provare a eseguire l'aggiornamento a una versione successiva e vedere se il problema persiste.
In generale, se si desidera comprendere le decisioni del pianificatore di query, è necessario esaminare la traccia dell'ottimizzatore per la query.