Như tôi vừa đọc, ALTER TABLE ... ORDER BY ...
truy vấn hữu ích để cải thiện hiệu suất trong các trường hợp nhất định. Tôi ngạc nhiên rằng Chỉ số PK không giúp được gì cho việc này. Tuy nhiên, từ tài liệu MySQL
, có vẻ như InnoDB không sử dụng chỉ mục. Tuy nhiên InnoDB có xu hướng chậm hơn như MyISAM. Điều đó nói rằng, với InnoDB, bạn sẽ không cần phải sắp xếp lại bảng nhưng bạn sẽ mất tốc độ cực nhanh của MyISAM. Nó vẫn có thể đáng để thử.
Theo cách bạn giải thích các vấn đề, có vẻ như có quá nhiều dữ liệu được tải vào bộ nhớ (thậm chí có thể có sự hoán đổi đang diễn ra?). Bạn có thể dễ dàng kiểm tra điều đó bằng cách theo dõi việc sử dụng bộ nhớ của mình. Thật khó để nói vì tôi không biết rõ về MySQL.
Mặt khác, tôi nghĩ vấn đề của bạn nằm ở một chỗ rất khác:Bạn đang sử dụng một máy chỉ có 512 Megs RAM làm máy chủ Cơ sở dữ liệu với một bảng chứa hơn 4Mio hàng ... Và bạn đang thực hiện một bộ nhớ rất nặng. thao tác trên toàn bộ bảng trên máy đó. Có vẻ như 512Megs sẽ gần như không đủ cho điều đó.
Một vấn đề cơ bản hơn mà tôi đang thấy ở đây:Bạn đang phát triển (và rất có thể là thử nghiệm) trong một môi trường rất khác với môi trường sản xuất. Loại vấn đề bạn đang giải thích là được mong đợi. Máy phát triển của bạn có bộ nhớ nhiều gấp sáu lần máy sản xuất của bạn. Tôi tin rằng tôi có thể nói một cách an toàn rằng bộ xử lý cũng nhanh hơn nhiều. Trong trường hợp đó, tôi khuyên bạn nên tạo một máy ảo bắt chước trang web sản xuất của bạn. Bằng cách đó, bạn có thể dễ dàng kiểm tra dự án của mình mà không làm gián đoạn địa điểm sản xuất.