Bạn chắc chắn phải chọn phương pháp tiếp cận dựa trên loại động cơ ... tối ưu hóa for MyISAM hoặc for InnoDB.
Gần đây, chúng tôi đã chạy điểm chuẩn so sánh các cách khác nhau để chèn dữ liệu và đo thời gian từ trước khi chèn và cho đến khi tất cả các chỉ mục được khôi phục hoàn toàn. Nó nằm trên một cái bàn trống, nhưng chúng tôi đã sử dụng tới 10 triệu hàng.
MyISAM với LOAD DATA INFILE
và ALTER TABLE ... ENABLE/DISABLE KEYS
được trao tay trong thử nghiệm của chúng tôi (trên hệ thống Windows 7, MySQL 5.5.27 - bây giờ chúng tôi đang thử trên hệ thống Linux).
CÁC BẬT BẬT và DISABLE không hoạt động đối với InnoDB, chỉ là MyISAM. Đối với InnoDB, hãy sử dụng SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;
nếu bạn chắc chắn dữ liệu của mình không chứa các bản sao (đừng quên đặt chúng thành 1
sau khi quá trình tải lên hoàn tất).
Tôi không nghĩ rằng bạn cần OPTIMIZE TABLE
sau khi chèn hàng loạt - các hàng MySQL được sắp xếp theo thứ tự chèn và chỉ mục được tạo lại. Không có "phân mảnh thêm" bằng cách thực hiện chèn hàng loạt.
Hãy bình luận nếu tôi đã thực hiện các lỗi thực tế.
CẬP NHẬT: Theo kết quả kiểm tra gần đây và đầy đủ của chúng tôi, lời khuyên cho các phím DISABLE/ENABLE là sai.
Một đồng nghiệp đã một chương trình chạy nhiều xét nghiệm khác nhau - một bảng với InnoDB/MyISAM điền sẵn và trống rỗng, lựa chọn và chèn tốc độ với LOAD DATA LOCAL
, INSERT INTO
, REPLACE INTO
và UPDATE
, trên "dày đặc" và bảng "phân mảnh" (Tôi không hoàn toàn chắc chắn như thế nào, tôi nghĩ rằng nó đã được dọc theo dòng DELETE FROM ... ORDER BY RAND() LIMIT ...
với một hạt giống cố định vì vậy nó vẫn còn so sánh) và kích hoạt và diasabled chỉ số.
Chúng tôi đã thử nghiệm nó với nhiều phiên bản MySQL khác nhau (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) trên Windows và Linux (mặc dù không có cùng phiên bản trên cả hai hệ điều hành). MyISAM chỉ thắng khi bàn trống. InnoDB nhanh hơn khi dữ liệu đã có mặt và thường hoạt động tốt hơn (trừ hdd-space - MyISAM nhỏ hơn trên đĩa).
Tuy nhiên, để thực sự hưởng lợi từ nó, bạn phải tự kiểm tra - với các phiên bản khác nhau, cài đặt cấu hình khác nhau và rất nhiều kiên nhẫn - đặc biệt liên quan đến những mâu thuẫn kỳ lạ (5.0.97 nhanh hơn 5.5.27) cùng một cấu hình - chúng tôi vẫn đang tìm kiếm nguyên nhân). Những gì chúng tôi đã tìm thấy là rằng DISABLE KEYS
và ENABLE KEYS
là bên cạnh vô giá trị và đôi khi vô hại nếu bạn không bắt đầu với một bảng trống.
Bạn có chắc chắn rằng cập nhật quan trọng là một nút cổ chai? – abcde123483
Đó là lo lắng của tôi và có ai đó có cùng một lo lắng ở đây http://forums.mysql.com/read.php?21,68820,68939#msg-68939 – Mellon
Dù sao, những chỉ mục đó sẽ được tạo khi bạn bật lại . Hãy thử làm một chèn bul chứ không phải hàng/hàng và cũng làm một số liệu thống kê cập nhật và xem nếu đó là cải thiện bất cứ điều gì. – Rahul