Qui pro quo...

I record dentro un db sono random per definizione. Chi li mette in ordine sara' l'indice oppure order by. Ma fisicamente si trovano nel primo buco libero disponibile.

Optimize fa in modo che non ci siano buchi, in caso di grandi spostamenti o cancellazioni ottimizzare la tabella significa compattare i record, non ordinarli.... sia chiaro.

Quindi un SELECT ordinera' secondo un indice se disponibile oppure secondo la richiesta di ORDER BY. Se la tabella e' molto frammentata, cioe' ha molti byte in eccesso rispetto ai dati presenti e' chiaro che si perde in performance.