Có sử dụng một kiểu dữ liệu smallint trong một bảng mysql trên một int thường xuyên thực sự cải thiện việc sử dụng bộ nhớ? Liệu phần cứng sẽ chỉ phân bổ kích thước từ 64 bit đầy đủ cho tất cả dữ liệu? Nếu nó không phân bổ một từ đầy đủ, thì chúng ta sẽ không thấy một hiệu suất giảm từ việc phải phân tích ra nhiều điểm nhỏ hoặc nhỏ từ một từ 64 bit được cấp phát trong bộ nhớ? Về cơ bản, có bất kỳ lợi ích thiết kế/bộ nhớ/hiệu suất nào khi sử dụng bảng sau trên bảng sau, giả sử chúng ta biết phạm vi giá trị được lưu trữ trong cột Status
sẽ không bao giờ vượt quá phạm vi tối đa/min của smallint? Mọi thông tin chi tiết sẽ được đánh giá cao:Có sử dụng smallint datatype trên int trong mysql thực sự tiết kiệm bộ nhớ?
create table `TestTableWithSmallInt` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`Status` smallint(11) DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table `TestTableWithInt` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`Status` int(11) DEFAULT 0,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Có thể đây là câu hỏi về phần cứng nhiều hơn? Sự hiểu biết của tôi về kiến trúc 64 bit là ngay cả giá trị nhỏ nhất có thể vẫn sẽ chiếm một kích thước từ 64 bit. Nếu vậy, sẽ không một smallint vẫn sử dụng cùng một bit 64 bit của bộ nhớ như là một int? Vì vậy, có hiệu quả, tuyên bố một lĩnh vực như smallint sẽ chỉ áp đặt một giá trị tối đa trên lĩnh vực này, mà không thực sự tiết kiệm bất kỳ bộ nhớ? Cảm ơn lời khuyên về việc khai báo các loại trần bằng cách này :) – encrest
Đó không phải là trường hợp. Có thể bạn đang nghĩ đến các vấn đề liên kết, nhưng giá trị 16 bit được [căn chỉnh trên ranh giới 4 byte] (http://software.intel.com/en-us/articles/data-alignment-when-migrating-to- 64-bit-intel-architecture) không 8. Tôi thực sự sẽ không lo lắng về điều này trừ khi bạn có thể đo lường dấu chân bộ nhớ của MySQL một cách có ý nghĩa, và tôi chưa bao giờ phải lo lắng về bản thân mình với mức độ chi tiết đó. Máy tính có bộ nhớ gigabyte, và có tối ưu hóa để đóng gói dữ liệu chặt chẽ hơn, nó hiếm khi là một mối quan tâm. – tadman