Я создаю базу данных в SQL Server 2008,базы данных: первичный ключ, кластерный или NONCLUSTERED
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)
Когда использовать каждый?
Я прочитал статью, но мне все еще не ясно. Может кто-нибудь дать мне быстрое объяснение?
Просто имейте в виду, что любые некластеризованные индексы, которые вы создаете, всегда будут включать данные в кластеризованном индексе (поскольку именно так определяется фактическая строка данных в таблице). [Microsoft docs] (http://msdn.microsoft.com/en-us/library/ms177484.aspx) Поэтому не думайте, что вы будете экономить место, указав индекс большой/широкий как кластеризованный индекс, если только вы не имеют никаких других указателей на таблице. – Granger
Первичный ключ - это идентификатор строки. Он должен быть уникальным, а не нулевым. Clustered Index сообщает SQL, как хранить данные на диске. Фактические строки данных хранятся в порядке, указанном этим индексом. Поскольку он также содержит данные о том, где данные хранятся на диске, кластерный индексный ключ хранится в каждом индексе. Почти во всех случаях лучше сделать их одинаковыми. И почти всегда лучше, чтобы первичный ключ был идентификатором, чтобы данные хранились на диске последовательно. – brianfeucht