Một cột bit SQL Server có thực sự sử dụng toàn bộ không gian byte không?


20

Tôi đã chọc vào SSMS và nhận thấy "kích thước" của INTcác cột của tôi là 4 byte (dự kiến) nhưng tôi hơi sốc khi thấy BITcác cột của mình là một byte toàn bộ.

Tôi đã hiểu sai những gì tôi đang nhìn?


1
Tôi cảm thấy may mắn khi các cột BIT được căn chỉnh trên một ranh giới byte thay vì một ranh giới từ.
Mike Sherrill 'Nhớ lại mèo'

Câu trả lời:



14

Vâng.

Nếu bạn chỉ có một bitcột trong bảng thì bộ lưu trữ sử dụng bytenhưng tối đa 8bit cột có thể được lưu trữ trong cùng một byte để 7 cột tiếp theo là "miễn phí" trong khía cạnh đó.

Ngoài ra còn có nhu cầu lưu trữ 1 bit cho mỗi cột cho NULL_BITMAP(một lần nữa được làm tròn đến byte kế tiếp). Trong các trang dữ liệu, phần này chứa một bitcột cho tất cả các cột bất kể chúng có cho phép hay không NULL( ngoại trừ các cột không thể được thêm sau này vì siêu dữ liệu chỉ thay đổi thông qua ALTER TABLEnơi hàng chưa được cập nhật)


9

BITsử dụng một byte mỗi hàng, nhưng bạn có thể đóng gói tối đa 8 BITtrường vào bộ lưu trữ một byte đó.

Vì vậy, trường đầu tiên có giá một byte, nhưng bảy trường tiếp theo là miễn phí !

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.