Come ho appena letto, il ALTER TABLE ... ORDER BY ...
query è utile per migliorare le prestazioni in determinati scenari. Sono sorpreso che l'indice PK non aiuti in questo. Ma, da i documenti MySQL
, sembra che InnoDB lo faccia usa l'indice Tuttavia InnoDB tende ad essere più lento come MyISAM. Detto questo, con InnoDB non avresti bisogno di riordinare il tavolo ma perderesti la velocità strabiliante di MyISAM. Potrebbe comunque valere la pena provare.
Dal modo in cui spieghi i problemi, sembra che ci siano troppi dati caricati in memoria (forse c'è anche lo scambio in corso?). Puoi facilmente verificarlo monitorando l'utilizzo della memoria. È difficile da dire perché non conosco molto bene MySQL.
D'altra parte, penso che il tuo problema risieda in un posto molto diverso:stai usando una macchina con solo 512 Mega di RAM come server di database con una tabella contenente più di 4 milioni di righe... E stai eseguendo un lavoro molto pesante operazione sull'intero tavolo su quella macchina. Sembra che 512 Mega non saranno sufficienti per questo.
Un problema molto più fondamentale che vedo qui:stai facendo sviluppo (e molto probabilmente anche test) in un ambiente molto diverso dall'ambiente di produzione. Il tipo di problema che stai spiegando è prevedibile. La tua macchina di sviluppo ha sei volte più memoria della tua macchina di produzione. Credo di poter tranquillamente affermare che anche il processore è molto più veloce. In tal caso, ti suggerisco di creare una macchina virtuale che imita il tuo sito di produzione. In questo modo puoi testare facilmente il tuo progetto senza interrompere il sito di produzione.