Ci sono un paio di fattori da considerare:
- L'ordinamento è un'operazione N.log(N).
- L'ordinamento per 14 milioni di righe potrebbe rientrare nella memoria principale; l'ordinamento con 500 milioni di righe probabilmente non lo fa, quindi l'ordinamento si riversa su disco, il che rallenta enormemente le cose.
Poiché il fattore ha una dimensione di circa 30, il tempo di ordinamento nominale per il big data set sarebbe dell'ordine di 50 volte più lungo, ovvero meno di due ore. Tuttavia, hai bisogno di 8 byte per valore di dati e circa altri 8 byte di sovraccarico (è un'ipotesi:sintonizzati su MySQL se sai di più su cosa memorizza in un indice). Quindi, 14 M × 16 ≈ 220 MB di memoria principale. Ma 500 M × 16 ≈ 8 GB di memoria principale. A meno che la tua macchina non abbia così tanta memoria da risparmiare (e MySQL sia configurato per usarla), il grosso tipo si riversa su disco e questo rappresenta gran parte del resto del tempo.