Как я только что прочитал, запрос ALTER TABLE ... ORDER BY ...
полезен для повышения производительности в определенных сценариях. Я удивлен, что PK Index не помогает с этим. Но из документов MySQL кажется, что InnoDB использует индекс. Однако InnoDB имеет тенденцию быть медленнее, чем MyISAM. Тем не менее, с InnoDB вам не нужно будет переупорядочивать стол, но вы потеряете невероятную скорость MyISAM. Это все еще может стоить выстрел.
То, как вы объясняете проблемы, кажется, что в память загружено слишком много данных (может быть, даже происходит обмен?). Вы можете легко проверить это с помощью мониторинга использования памяти. Трудно сказать, поскольку я не очень хорошо знаю MySQL.
С другой стороны, я думаю, что ваша проблема лежит в другом месте: вы используете компьютер с 512 мегабайтами ОЗУ в качестве сервера базы данных с таблицей, содержащей более 4 миллионов строк ... И вы выполняете очень Операция с большим объемом памяти на всей таблице на этой машине. Кажется, что 512Megs почти не хватит для этого.
Здесь я вижу гораздо более фундаментальную проблему: вы занимаетесь разработкой (и, скорее всего, также тестированием) в среде, которая сильно отличается от производственной среды. Вид проблемы, которую вы объясняете, следует ожидать. Ваша машина для разработки имеет в шесть раз больше памяти, чем ваша рабочая машина. Я уверен, что могу с уверенностью сказать, что процессор гораздо быстрее. В этом случае я предлагаю вам создать виртуальную машину, имитирующую ваш производственный сайт. Таким образом, вы можете легко протестировать свой проект, не нарушая производственную площадку.