Không, sử dụng NULL sẽ không chiếm ít dung lượng hơn VARCHAR
trống hoặc INT
đồng ruộng. Trên thực tế, nó có thể chiếm nhiều hơn không gian. Đây là lý do tại sao:
A VARCHAR
được lưu trữ dưới dạng kích thước + giá trị. Số byte được sử dụng cho kích thước phụ thuộc vào dung lượng lưu trữ tối đa của VARCHAR
. VARCHAR(255)
yêu cầu một byte, VARCHAR(65536)
yêu cầu hai byte, v.v.
Vì vậy, VARCHAR(255)
cột chiếm một byte ngay cả khi bạn lưu trữ một chuỗi rỗng. Bảng sau sẽ chiếm tối thiểu một byte cho mỗi hàng (cộng với một số chi phí có thể có khác tùy thuộc vào công cụ lưu trữ).
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
Để lưu NULL
giá trị, MySQL sử dụng một mặt nạ bit cho mỗi hàng. Có thể lưu trữ tối đa 8 cột nullable trên mỗi byte. Vì vậy, nếu bạn có một bảng như thế này:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
Sẽ chiếm tối thiểu hai byte mỗi hàng. Lưu trữ NULL
chỉ cần thiết lập bit, nó đã được bảo lưu cho dù bạn có sử dụng hay không. Byte cho VARCHAR
Kích thước của vẫn được sử dụng cho mỗi hàng ngay cả khi cột được đặt thành NULL
.