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

Hiểu cấu trúc bản ghi MyISAM

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

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn dữ liệu từ giao diện người dùng vào mysql db trong anglejs

  2. xóa hàng bằng hàm ajax và php

  3. Kết nối DATABASE LOẠI lỗi:2002:Quyền bị từ chối

  4. Số tham số không hợp lệ:tham số không được xác định Chèn dữ liệu

  5. Làm cách nào để thay đổi hành động tham chiếu khóa ngoại? (hành vi)