Bạn nên ĐỊNH NGHĨA giới thiệu một đại diện thay thế INT IDENTITY()
khóa chính! INT đã cung cấp cho bạn khả năng lên đến 2 tỷ hàng - như vậy chưa đủ ??
Khóa chính / khóa cụm này trên SQL Server sẽ có kích thước tối đa là 64 byte (thay vì 4, đối với INT) - điều này sẽ làm cho chỉ mục được phân nhóm của bạn VÀ tất cả chỉ mục không được phân cụm của bạn bị phình ra ngoài khả năng nhận dạng. Toàn bộ khóa phân cụm (tất cả 8 cột của bạn) sẽ được bao gồm trên mỗi trang của mỗi chỉ mục không phân cụm trên bảng đó - chắc chắn sẽ lãng phí rất nhiều không gian.
Vì vậy, trên bất kỳ bảng chỉ mục nhất định nào, bạn sẽ có nhiều mục nhập hơn tới 16 lần với khóa cụm INT thay thế - điều đó có nghĩa là ít I / O hơn rất nhiều, ít lãng phí thời gian hơn khi đọc các trang chỉ mục.
Và chỉ cần tưởng tượng cố gắng thiết lập mối quan hệ khóa ngoại với bảng đó .... bất kỳ bảng con nào sẽ phải có tất cả 8 cột khóa chính của bạn dưới dạng các cột khóa ngoại và chỉ định tất cả 8 cột trong mọi phép nối - thật là một cơn ác mộng !!
Ở 78 triệu hàng, thậm chí chỉ cần thay đổi khóa phân cụm thành INT IDENTITY sẽ giúp bạn tiết kiệm tới 60 byte mỗi hàng - chỉ riêng điều đó sẽ lên đến 4 GByte dung lượng ổ đĩa (và mức sử dụng RAM trong máy chủ của bạn). Và điều đó thậm chí còn chưa bắt đầu để tính toán khoản tiết kiệm trên các chỉ số không phân cụm .......
Và tất nhiên, có, tôi cũng sẽ thay đổi VARCHAR (10) thành INT hoặc BIGINT - nếu đó là một số, hãy đặt trường là số - thực sự không có ý gì khi để nó ở VARCHAR (10). Nhưng chỉ điều đó sẽ không tạo ra sự khác biệt lớn về tốc độ hoặc hiệu suất - nó chỉ giúp làm việc với dữ liệu dễ dàng hơn nhiều (không phải luôn chuyển sang các loại số khi ví dụ:so sánh các giá trị, v.v.).
Marc