Вопрос по sql-server-2008, database – база данных: первичный ключ, кластеризованный или некластеризованный

34

Я создаю базу данных в SQL Server 2008,

CREATE TABLE Users
(
    U_Id INT NOT NULL
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    Email VARCHAR(200)
    Password VARCHAR(50)
)

Я хочу сделать U_Id первичным ключом. Я хотел бы спросить, в чем разница между

 CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

эт

 CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

и эт

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

Когда использовать каждый?

Я читал какую-то статью, но она мне до сих пор неясна. Может ли кто-нибудь дать мне быстрое объяснение?

Ваш Ответ

1   ответ
40

Следующее утверждение:

CONSTRAINT pk_UserID PRIMARY KEY (U_Id)

То же самое, что и этот:

CONSTRAINT pk_UserID PRIMARY KEY CLUSTERED (U_Id)

У вас может быть только физичность табличных данных, упорядоченная пооди индексов, и по умолчанию этот индекс используется для первичного ключа (ограничение уникальности первичного ключа всегда поддерживается индексом).

Если вы хотите оставить порядок хранения данных таблицы в соответствии с каким-либо другим индексом, то вы должны создать первичный ключ с помощью:

CONSTRAINT pk_UserID PRIMARY KEY NONCLUSTERED (U_Id)

А затем создайте кластерный индекс с помощью:

CREATE CLUSTERED INDEX ix_Email ON Users (Email); 
Просто имейте в виду, что любые некластеризованные индексы, которые вы создаете, всегда будут включать данные в кластеризованный индекс (потому что именно так будет найдена фактическая строка данных в таблице). Microsoft Docs Так что не думайте, что вы сэкономите место, сделав большой / широкий индекс кластеризованным, если у вас нет других индексов в таблице. Granger
Primary Key - это идентификатор строки. Он должен быть уникальным и не нулевым. Clustered Index сообщает SQL, как хранить данные на диске. Фактические строки данных хранятся в порядке, указанном этим индексом. Поскольку он также содержит данные о том, где эти данные хранятся на диске, ключ кластерного индекса хранится в каждом индексе. Почти во всех случаях лучше сделать так, чтобы они были одинаковыми. И почти всегда лучше, чтобы первичный ключ был идентификатором, чтобы данные сохранялись на диске последовательно. brianfeucht

Похожие вопросы