Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Các phím tắt và bật MySQL

Bạn chắc chắn phải chọn cách tiếp cận của mình dựa trên loại công cụ ... tối ưu hóa dành cho MyISAM hoặc cho InnoDB .

Gần đây, chúng tôi đã chạy một đ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ỉ số được khôi phục hoàn toàn. Nó nằm trên một chiếc 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 INFILEALTER TABLE ... ENABLE/DISABLE KEYS đã thắng 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 KHÓA BẬT và TẮT không hoạt động cho InnoDB, đó chỉ là MyISAM. Đối với InnoDB, 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 tải lên hoàn tất).

Tôi không nghĩ 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 vẫn được xây dựng lại. Không có "phân mảnh bổ sung" khi thực hiện chèn hàng loạt.

Vui lòng bình luận nếu tôi mắc lỗi thực tế.

CẬP NHẬT: Theo kết quả kiểm tra gần đây và đầy đủ hơn của chúng tôi, lời khuyên BẬT / BẬT phím là sai.

Một đồng nghiệp có chương trình chạy nhiều bài kiểm tra khác nhau - một bảng với InnoDB / MyISAM được điền sẵn và trống, tốc độ lựa chọn và chèn với LOAD DATA LOCAL , INSERT INTO , REPLACE INTOUPDATE , trên các bảng "dày đặc" và "bị phân mảnh" (tôi không rõ lắm về cách thức, tôi nghĩ nó nằm dọc theo dòng DELETE FROM ... ORDER BY RAND() LIMIT ... với một hạt giống cố định nên nó vẫn có thể so sánh được) và các chỉ số được bật và tắt.

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 (tuy nhiên, không phải các phiên bản giống nhau 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ó sẵn và thường hoạt động tốt hơn (ngoại 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ự mình kiểm tra nó - với các phiên bản khác nhau, cài đặt cấu hình khác nhau và rất kiên nhẫn - đặc biệt là về sự không nhất quán kỳ lạ (5.0.97 nhanh hơn rất nhiều so với 5.5.27 với 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à DISABLE KEYS đó và ENABLE KEYS bên cạnh vô giá trị và đôi khi có hại nếu bạn không bắt đầu với một bảng trống.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel:cách lấy giá trị trung bình trên các mối quan hệ hasMany lồng nhau (hasManyThrough)

  2. MySQL và JSON - chuyển mảng thành hàng

  3. Cách tự động tải MySQL khi khởi động trên OS X Yosemite / El Capitan

  4. Thêm một cột SQL mới với giá trị mặc định

  5. Độ dài dữ liệu LONGBLOB tối đa Mysql PDO khi tìm nạp