Som jag nyss läste, ALTER TABLE ... ORDER BY ...
fråga är användbar för att förbättra prestandan i vissa scenarier. Jag är förvånad över att PK Index inte hjälper till med detta. Men från MySQL-dokumenten
, det verkar som att InnoDB gör använd indexet. InnoDB tenderar dock att vara långsammare som MyISAM. Som sagt, med InnoDB skulle du inte behöva beställa bordet om, men du skulle förlora den blixtrande hastigheten hos MyISAM. Det kan fortfarande vara värt ett försök.
Som du förklarar problemen verkar det som att det finns för mycket data inläst i minnet (kanske det till och med pågår utbyte?). Du kan enkelt kontrollera det med att övervaka din minnesanvändning. Det är svårt att säga eftersom jag inte känner till MySQL så väl.
Å andra sidan tror jag att ditt problem ligger på ett helt annat ställe:Du använder en maskin med endast 512 megapixlar RAM som databasserver med en tabell som innehåller mer än 4 miljoner rader... Och du utför en mycket minnestung drift på hela bordet på den maskinen. Det verkar som att 512Megs inte alls kommer att räcka för det.
En mycket mer grundläggande fråga som jag ser här:Du håller på med utveckling (och med stor sannolikhet även testning) i en miljö som är väldigt annorlunda än produktionsmiljön. Den typ av problem du förklarar är att förvänta sig. Din utvecklingsmaskin har sex gånger så mycket minne som din produktionsmaskin. Jag tror att jag med säkerhet kan säga att processorn är mycket snabbare också. I så fall föreslår jag att du skapar en virtuell maskin som efterliknar din produktionsplats. På så sätt kan du enkelt testa ditt projekt utan att störa produktionsplatsen.