Tôi có một bảng với các hàng 490 M và 55 GB không gian bảng, vì vậy khoảng 167 byte mỗi hàng. Bảng có ba cột: a VARCHAR(100)
, a DATETIME2(0)
và a SMALLINT
. Độ dài trung bình của văn bản trong VARCHAR
trường là khoảng 21,5, vì vậy dữ liệu thô phải ở khoảng 32 byte mỗi hàng: 22 + 2 cho VARCHAR
, 6 cho DATETIME2
và 2 cho số nguyên 16 bit.
Lưu ý rằng không gian trên chỉ là dữ liệu, không phải chỉ mục. Tôi đang sử dụng giá trị được báo cáo trong Thuộc tính | Lưu trữ | Chung | Không gian dữ liệu.
Tất nhiên phải có một số chi phí, nhưng 135 byte mỗi hàng có vẻ như rất nhiều, đặc biệt là đối với một bảng lớn. Tại sao điều này có thể được? Có ai khác nhìn thấy số nhân tương tự? Những yếu tố có thể ảnh hưởng đến lượng không gian thêm cần thiết?
Để so sánh, tôi đã thử tạo một bảng có hai INT
trường và 1 M hàng. Không gian dữ liệu cần có là 16,4 MB: 17 byte mỗi hàng, so với 8 byte dữ liệu thô. Một bảng thử nghiệm khác có một INT
và một VARCHAR(100)
quần thể có cùng văn bản với bảng thực sử dụng 39 byte mỗi hàng (44 hàng K), trong đó tôi sẽ mong đợi 28 cộng một chút.
Vì vậy, bảng sản xuất có nhiều chi phí đáng kể. Đây có phải là vì nó lớn hơn? Tôi hy vọng kích thước chỉ mục sẽ xấp xỉ N * log (N), nhưng tôi không hiểu tại sao không gian cần thiết cho dữ liệu thực tế là phi tuyến tính.
Cảm ơn trước cho bất kỳ con trỏ!
CHỈNH SỬA:
Tất cả các lĩnh vực được liệt kê là NOT NULL
. Bảng thực có một cụm PK trên VARCHAR
trường và DATETIME2
trường, theo thứ tự đó. Đối với hai bài kiểm tra, đầu tiên INT
là PK (cụm).
Nếu nó quan trọng: bảng là một bản ghi kết quả ping. Các trường là URL, ngày / giờ ping và độ trễ tính bằng mili giây. Dữ liệu liên tục được thêm vào và không bao giờ được cập nhật, nhưng dữ liệu sẽ bị xóa theo định kỳ để cắt giảm xuống chỉ còn một vài bản ghi mỗi giờ trên mỗi URL.
CHỈNH SỬA:
Một câu trả lời rất thú vị ở đây cho thấy rằng, đối với một chỉ mục có nhiều đọc và viết, việc xây dựng lại có thể không có lợi. Trong trường hợp của tôi, không gian tiêu thụ là một mối quan tâm, nhưng nếu hiệu suất ghi là quan trọng hơn, người ta có thể tốt hơn với các chỉ số yếu.