Sự khác biệt có nhiều khả năng là do cấu hình của innoDB, điều này cần tinh chỉnh nhiều hơn so với myISAM. Ý tưởng của innoDB là giữ cho hầu hết dữ liệu của bạn trong bộ nhớ, và xả/đọc vào đĩa chỉ khi bạn có một vài chu kỳ cpu dự phòng.
thậm chí bạn nên bận tâm với InnoDB là một câu hỏi thực sự hay. Nếu bạn định tiếp tục sử dụng MySQL, bạn nên có một số kinh nghiệm với InnoDB. Nhưng nếu bạn đang làm một công việc nhanh chóng và bẩn thỉu cho một cơ sở dữ liệu mà sẽ không thấy nhiều lưu lượng truy cập và không lo lắng về quy mô, thì sự dễ dàng của MyISAM có thể chỉ là một chiến thắng cho bạn. InnoDB có thể quá mức trong nhiều trường hợp mà ai đó chỉ muốn một cơ sở dữ liệu đơn giản.
nhưng nhiều người trong bàn của tôi sẽ không được cập nhật
Bạn vẫn có thể có được một thang máy hiệu suất từ InnoDB nếu bạn đang làm 99% đọc. Nếu bạn cấu hình kích thước vùng đệm của bạn để giữ toàn bộ cơ sở dữ liệu trong bộ nhớ, InnoDB sẽ KHÔNG BAO GIỜ phải vào đĩa để lấy dữ liệu của bạn, ngay cả khi nó bỏ lỡ bộ nhớ truy vấn mysql. Trong MyISAM, có một cơ hội tốt để bạn đọc hàng từ đĩa, và bạn đang rời khỏi hệ điều hành để làm bộ nhớ đệm và tối ưu hóa cho bạn.
InnoDB-đệm-pool-kích thước
đoán đầu tiên của tôi là để kiểm tra innodb_buffer_pool_size mà tàu ra khỏi hộp thiết lập để 8M. Bạn nên có khoảng 80% tổng số bộ nhớ của mình. Một khi bạn đạt giới hạn đó, hiệu suất InnoDB sẽ giảm đáng kể vì nó cần phải tuôn một cái gì đó ra khỏi bộ đệm để nhường chỗ cho các dữ liệu mới, mà có thể tốn kém
autocommit = 0
Ngoài ra, hãy chắc chắn autocommit là tắt trong khi bạn tải bảng của bạn, hoặc xả sẽ xảy ra trên mỗi chèn. Bạn có thể bật lại sau khi đã hoàn tất và đó là cài đặt phía máy khách. rất an toàn.
Việc tải các bảng thường xảy ra khi
Hãy suy nghĩ xem bạn có thực sự muốn điều chỉnh cơ sở dữ liệu để chứa "chèn 17million hàng" hay không. Bạn có thường xuyên làm việc này không? MyISAM có thể nhanh hơn trong trường hợp này, nhưng khi bạn có 100 kết nối đồng thời tất cả đọc và sửa đổi bảng này cùng một lúc, bạn sẽ tìm thấy một innoDB được điều chỉnh tốt sẽ giành chiến thắng và MyISAM sẽ bị sặc trên ổ khóa bảng.
Làm thế nào MyISAM thấy hoạt động này
MyISAM sẽ rất giỏi trong việc này mà không cần bất kỳ điều chỉnh, bởi vì dưới lớp chăn, bạn chỉ cần gắn thêm mỗi hàng vào một tập tin (và cập nhật một index). Hệ điều hành và bộ nhớ đệm trên đĩa của bạn sẽ xử lý tất cả các vấn đề về hiệu suất đó.
Làm thế nào InnoDB thấy hoạt động này
InnoDB sẽ biết bảng cần một ghi, vì vậy nó ném hàng vào bộ đệm chèn. Bạn không có thời gian trước khi chèn tiếp theo, vì vậy innoDB không có thời gian để giải quyết bộ đệm, nó chạy ra khỏi phòng và bị buộc phải 'giữ' chèn trong khi nó ghi vào vùng đệm và cập nhật chỉ mục. Tiếp theo, vùng đệm của bạn đầy, và innoDB buộc phải 'giữ' chèn và xóa một số trang ra khỏi vùng đệm vào đĩa. Và bạn tiếp tục ném vào nó như điên. Lưu ý rằng khi bạn điều chỉnh InnoDB để cung cấp cho bạn một dấu nhắc MySQL> rất nhanh sau khi bạn làm điều này, InnoDB vẫn sẽ xáo trộn bên dưới vỏ để bắt kịp trong thời gian rảnh rỗi, nhưng sẽ sẵn sàng thực hiện giao dịch mới cho bạn.
PHẢI ĐỌC:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html (nhìn thấy số lượng lớn các mẹo dữ liệu tải)
tôi chỉ sử dụng InnoDB khi tôi đang làm việc với các bảng quan hệ. Nếu không, nếu bạn không có bất kỳ chìa khóa nước ngoài, MyISAM là những gì tôi thích! –
chỉ để chỉ ra, có một chỉ số trên cả hai bảng. bảng "main" hiện đang là myisam. – nick
ben, tôi muốn sử dụng các bảng quan hệ nhưng tôi sẽ xử lý hàng trăm triệu hàng - tôi cũng cần phải lập chỉ mục hàng chục cột, vì vậy tôi không biết phải đi theo hướng nào. tính toàn vẹn không phải là vấn đề. không phải cho phần này ít nhất. – nick