1. Mối Quan Hệ Giữa Page và Row Trong InnoDB
1.1. Khái Niệm Về Page
Page
là đơn vị lưu trữ cơ bản trong cơ sở dữ liệu InnoDB của MySQL.- Mỗi
page
có kích thước cố định; tất cả dữ liệu của bảng được lưu trữ trong cácpage
. - Kích thước
page
mặc định trong InnoDB là16KB
, nhưng có thể điều chỉnh thành4KB
,8KB
,32KB
hoặc64KB
tùy theo nhu cầu sử dụng.
1.2. Khái Niệm Về Row
- Mỗi
table
trong MySQL bao gồm nhiềurow
, và mỗirow
được lưu trữ trong một hoặc nhiềupage
. - Một
page
có thể chứa nhiềurow
khác nhau.
Lưu ý Quan Trọng:
- MySQL thực hiện thao tác trên
page
thay vìrow
, nghĩa là khi thực hiện câu lệnh chọn dữ liệu, MySQL sẽ truy xuất toàn bộ cácpage
chứa cácrow
cần thiết để xử lý. - Đối với các kích thước
page
khác nhau (như 4KB, 8KB, 16KB,...), InnoDB quy định rằng độ dài tối đa của mỗirow
sẽ không quá 1/2 kích thước củapage
. Cụ thể:- Với
page
16KB, độ dài tối đa của mộtrow
là khoảng 8KB. - Với
page
64KB, độ dài tối đa của mộtrow
là gần 16KB.
- Với
Tóm lại: Hãy tưởng tượng
page
như một tờ giấy A4, trong khirow
là các dòng dữ liệu trên tờ giấy đó. Độ dài của cácrow
không vượt quá một nửa kích thước củapage
nhằm tối ưu hóa hiệu suất lưu trữ và truy xuất dữ liệu.
Ví Dụ Cụ Thể
Giả sử bạn có một bảng có cấu trúc như sau:
CREATE TABLE employee (
id INT,
name VARCHAR(255),
address VARCHAR(255),
description TEXT
);
- Nếu kích thước
page
là 16KB và mỗirow
của bảngemployee
có dung lượng xấp xỉ 8KB, mỗipage
có thể chứa được 2rows
. - Nếu kích thước
page
là 64KB, mộtpage
có thể chứa khoảng 4rows
(vì mỗirow
có dung lượng tối đa 16KB).
Việc giới hạn kích thước của mỗi row
(tối đa 1/2 kích thước của page
) không chỉ giúp tiết kiệm diện tích lưu trữ mà còn cải thiện hiệu suất khi thực hiện các thao tác trên cơ sở dữ liệu.
2. Khi Dữ Liệu Row Vượt Quá Dung Lượng Tối Đa
Khi một row
vượt quá kích thước tối đa cho phép, các cột dạng VARCHAR, VARBINARY, BLOB hoặc TEXT sẽ được chuyển sang lưu trữ bên ngoài page
(hay còn gọi là off-page storage).
Có hai loại định dạng off-page storage: COMPACT/REDUNDANT và DYNAMIC/COMPRESSED.
2.1. Định Dạng COMPACT / REDUNDANT
InnoDB sẽ lưu trữ một phần dữ liệu của cột dạng biến độ dài trong page
chính và phần còn lại trong các overflow pages.
- Cụ thể:
- InnoDB lưu 768 byte đầu tiên của cột ngay trong
row
trênpage
chính. - Nếu dữ liệu của cột dài hơn 768 byte, phần còn lại sẽ nằm trong các
overflow pages
. Ví dụ, nếu cột có dung lượng 1500 byte, 768 byte sẽ ởpage
chính, và 732 byte còn lại sẽ ởoverflow pages
. - Phía trước 768 byte, có thêm 20 byte để lưu trữ độ dài thực tế của cột và con trỏ trỏ đến danh sách các
overflow pages
.
- InnoDB lưu 768 byte đầu tiên của cột ngay trong
Tóm tắt: Trong định dạng COMPACT và REDUNDANT, 768 byte đầu tiên của cột được lưu tạm trong row
trên page
chính, trong khi phần còn lại sẽ được lưu bên ngoài page
.
2.2. Định Dạng DYNAMIC / COMPRESSED
Khi một cột với độ dài thay đổi cần lưu trữ ngoài page
, InnoDB không lưu 768 byte đầu tiên ở page
chính như ở định dạng COMPACT/REDUNDANT.
- Cụ thể:
- Toàn bộ dữ liệu sẽ được chuyển ngay đến các
overflow pages
ngay từ đầu. - Chỉ có một con trỏ 20 byte được lưu trên
page
chính để trỏ đến vị trí của cácoverflow pages
chứa dữ liệu của cột.
- Toàn bộ dữ liệu sẽ được chuyển ngay đến các
Tóm tắt: Trong định dạng DYNAMIC và COMPRESSED, chỉ có con trỏ 20 byte được lưu trên page
chính, trong khi toàn bộ dữ liệu của cột được để ở overflow pages
, giúp tiết kiệm không gian trên page
chính.
Đặc điểm | COMPACT / REDUNDANT | DYNAMIC / COMPRESSED |
---|---|---|
Phần dữ liệu trên page chính | 768 byte đầu tiên + 20 byte pointer | Chỉ có 20 byte pointer |
Dữ liệu ngoài page | Phần còn lại sau 768 byte đầu | Toàn bộ dữ liệu cột |
Ưu điểm | Tốc độ truy cập nhanh với dữ liệu nhỏ | Tiết kiệm không gian, hiệu quả với cột dữ liệu lớn |
Nhược điểm | Tốn nhiều không gian page chính | Có thể làm giảm tốc độ truy cập dữ liệu |
Khi Nào Nên Sử Dụng Loại Nào?
- COMPACT/REDUNDANT: Phù hợp khi dữ liệu của cột thường không lớn (dưới 768 byte), vì định dạng này hỗ trợ lưu trữ 768 byte đầu tiên trong
page
chính, giúp dễ dàng truy cập hơn. - DYNAMIC/COMPRESSED: Phù hợp với các bảng có nhiều cột lớn, vì toàn bộ dữ liệu được lưu bên ngoài
page
, giúp tiết kiệm không gian và tăng khả năng chứarow
trong mộtpage
.
Kết Luận
Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về mối quan hệ giữa page
và row
trong InnoDB. Để nhận thêm nhiều bài viết thú vị khác, hãy kết nối với tôi qua các trang mạng xã hội:
- Youtube: https://www.youtube.com/@pdthien
- LinkedIn: www.linkedin.com/in/pdthien
Tài Liệu Tham Khảo
- Nguyên lý 3+2 hiệu quả cho mọi database - anh Trần Quốc Huy
- Tài liệu resmi của MySQL
source: viblo