nào sql kiểu dữ liệu chúng ta nên sử dụng cho số căn cứ khóa chính:Loại dữ liệu Sql cho khóa chính - SQL Server?
- int
- bigint
- số
- phao
nào sql kiểu dữ liệu chúng ta nên sử dụng cho số căn cứ khóa chính:Loại dữ liệu Sql cho khóa chính - SQL Server?
Nói chung, int
.
bigint
nếu bạn nghĩ mình sẽ có nhiều hàng hơn các nguyên tử trong vũ trụ.
uniqueidentifier
rất hữu ích nếu bạn cần toàn cầu phím độc đáo (phím đó được đảm bảo là duy nhất trên tất cả các bảng trong lược đồ, thậm chí có thể phổ biến duy nhất (tôi không nhớ))
Các khác hai tôi sẽ không sử dụng chúng không phải là các loại không thể tách rời (chúng có các phân số, mà không có ý nghĩa nhiều như các phím)
Nếu bạn chọn một bộ định danh duy nhất, hãy xem xét làm cho nó trở thành một khóa chính KHÔNG BAO GIỜ, nếu không chèn có thể có vấn đề về hiệu năng. – Brannon
Cảm ơn bạn đã nâng cấp, Brannon. –
int bị giới hạn 'chỉ' khoảng 2 tỷ. Tôi đã đạt đến giới hạn này với một số tính năng ghi nhật ký;) – Mose
Một lý do rất lớn để không sử dụng GUID cho PK là tỷ lệ lấp đầy khủng khiếp cho các trang chỉ mục - việc lạm dụng như vậy có thể làm tăng đáng kể chi phí hoạt động I/O của bạn. GUID nên được để lại dưới dạng AK và thay vào đó truy vấn các truy vấn bằng PK có nguồn gốc từ bất cứ nơi nào có thể.
Điều đó thực sự là một chút không chính xác - GUID như là một PK là okay-GUID như CLUSTERING KEY là một desaster. PK per se không ảnh hưởng đến tổ chức dữ liệu vật lý - đó là công việc của cụm khóa :) –
cho bộ vi xử lý 32 bit, int có thể là kích thước hiệu quả nhất để xử lý.
Ranh giới từ ít liên quan hơn so với không gian chiếm đóng từ Int sang BigInt - trừ khi bạn mong đợi một hàng đếm bằng hàng tỷ, hãy lưu hàng byte và chi tiêu chúng ở nơi khác. Chi phí I/O là một số đơn đặt hàng đắt hơn truy cập bộ nhớ. – stephbu
Đồng ý, tôi chỉ thêm một lý do khác để sử dụng int. – dkretz
Bạn thực sự cần phải giữ cho hai vấn đề riêng biệt ngoài:
1) chính chủ chốt là một cấu trúc logic - một trong những ứng cử viên chủ chốt duy nhất và đáng tin cậy xác định một hàng trong bảng của bạn. Điều này có thể là bất cứ điều gì, thực sự - một INT, một GUID, một chuỗi - chọn những gì có ý nghĩa nhất cho kịch bản của bạn.
2) phân nhóm chính (cột hoặc cột mà xác định "chỉ số clustered" trên bảng) - đây là một chất điều lưu trữ liên quan đến , và ở đây, một nhỏ, ổn định, ngày càng tăng loại dữ liệu là lựa chọn tốt nhất của bạn - INT hoặc BIGINT làm tùy chọn mặc định của bạn.
Theo mặc định, khóa chính trên bảng SQL Server cũng được sử dụng làm khóa phân cụm - nhưng điều đó không cần phải theo cách đó! Tôi đã cá nhân có vẻ tăng hiệu suất lớn theo thời gian khi phá vỡ GUID dựa trên chính Clustered Key chính thành hai khóa riêng biệt - chính (hợp lý) quan trọng trên GUID, và clustering (đặt hàng) quan trọng trên một riêng biệt INT IDENTITY (1 , 1) cột.
Phân đoạn chỉ mục giảm xuống mức tối thiểu và do đó chỉ mục tìm kiếm hiệu suất đã được khuyến nghị!
Marc
unsigned int
của bất cứ kích thước đáp ứng nhu cầu cụ thể của bạn
Ngoại trừ máy chủ SQL không có kiểu dữ liệu chưa được ký. – Joe
Nó phụ thuộc! Trong tình huống như thế nào? Cần thêm thông tin, xin vui lòng ... –