Cơ sở dữ liệu 15/11/2026 6 phút

SQLite đo thật — rowid, INTEGER PRIMARY KEY và WITHOUT ROWID: vì sao mỗi bảng thường có một rowid ẩn, một khóa chính không phải số nguyên sinh thêm cả một cây B-tree, và WITHOUT ROWID cắt một nửa dung lượng

Phần 3 sê-ri SQLite đo thật: mỗi bảng thường (rowid table) có một khóa 64-bit ẩn tên rowid, và khai INTEGER PRIMARY KEY chỉ là đặt bí danh cho rowid chứ không lưu thêm cột. Đo trong container sqlite 3.45.3: một khóa chính TEXT trên bảng rowid tạo thêm một cây B-tree index tự động (sqlite_autoindex) gần như nhân đôi dung lượng — 500 nghìn dòng chiếm 24 MB. Khai cùng bảng đó WITHOUT ROWID khiến chính khóa chính thành khóa của cây bảng, bỏ hẳn index phụ, còn 12 MB — đúng một nửa. Đổi lại WITHOUT ROWID có cái giá của nó với index thứ cấp.