Thông tin bạn có trong câu hỏi liên quan đến MyISAM là đúng mục tiêu. Tuy nhiên, tôi muốn trả lời thêm hai câu hỏi của bạn:
CÂU HỎI MỚI NHẤT
Theo Sách
Chương 10:"Động cơ lưu trữ" Trang 196 Đoạn 7 nói
Dựa trên đoạn văn đó, bản ghi cũ chỉ bị ghi đè bằng dữ liệu liên kết nếu dữ liệu mới để chèn không thể vừa với khối được cấp phát trước đó. Điều này có thể dẫn đến nhiều hàng bị cồng kềnh.
CÂU HỎI BỔ SUNG
Từ câu trả lời trước đây của tôi, sẽ có rất nhiều khối có
- khối không gian
- độ dài của bản ghi
- số byte không sử dụng trong khối
- Cờ chỉ báo giá trị NULL
- có thể là một con trỏ đến phần tiếp theo của bản ghi nếu bản ghi không vừa với không gian đã tạo trước đó và phải được chia nhỏ
Các liên kết bản ghi như vậy sẽ bắt đầu ở phía trước mỗi hàng có dữ liệu quá khổ được chèn vào. Điều này có thể làm phình bảng MyISAM .MYD
nộp rất nhanh.
ĐỀ XUẤT
Định dạng hàng mặc định của MyISAM là Động. Khi một bảng là Động và trải qua nhiều CHÈN, CẬP NHẬT và XÓA, một bảng như vậy sẽ cần được tối ưu hóa với
OPTIMIZE TABLE mytable;
Có một giải pháp thay thế:chuyển định dạng hàng của bảng thành Cố định. Bằng cách đó, tất cả các hàng có cùng kích thước. Đây là cách bạn thực hiện định dạng hàng Cố định:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Ngay cả với Định dạng hàng cố định, vẫn phải mất thời gian để tìm một bản ghi có sẵn nhưng thời gian sẽ là O (1) thời gian tìm kiếm (Theo thuật ngữ của giáo dân, sẽ mất cùng một khoảng thời gian để xác định một bản ghi có sẵn cho dù có bao nhiêu hàng bảng có hoặc có bao nhiêu hàng bị xóa). Bạn có thể bỏ qua bước đó bằng cách bật concurrent_insert như sau:
Thêm cái này vào my.cnf
[mysqld]
concurrent_insert = 2
Khởi động lại MySQL không bắt buộc. Chỉ cần chạy
mysql> SET GLOBAL concurrent_insert = 2;
Điều này sẽ khiến tất cả các INSERT ở cuối bảng mà không cần tìm dung lượng trống.
Lợi thế của bảng Hàng cố định
- CHÈN, CẬP NHẬT và XÓA sẽ nhanh hơn một chút
- SELECT nhanh hơn 20-25%
Đây là một số bài đăng của tôi về việc CHỌN nhanh hơn vì Định dạng hàng đang được sửa
-
May 03, 2012
: Cái nào nhanh hơn, InnoDB hoặc MyISAM? -
Sep 20, 2011
: Tốt nhất của MyISAM và InnoDB -
May 10, 2011
: Tác động về hiệu suất của việc sử dụng CHAR so với VARCHAR trên trường có kích thước cố định là gì?
Nhược điểm của bảng Hàng cố định
Trong hầu hết các trường hợp, khi bạn chạy ALTER TABLE mytable ROW_FORMAT=Fixed;
, bảng có thể tăng 80-100%. .MYI
tệp (các trang chỉ mục cho bảng MyISAM) cũng sẽ phát triển với tốc độ tương tự.
DANH SÁCH
Nếu bạn muốn có tốc độ cho các bảng MyISAM và có thể sống với các bảng lớn hơn, thì các đề xuất thay thế của tôi sẽ là cần thiết. Nếu bạn muốn tiết kiệm không gian cho mỗi bảng MyISAM, hãy để nguyên định dạng hàng (Động). Bạn sẽ phải nén bảng với OPTIMIZE TABLE mytable;
thường xuyên hơn với bảng Động.