Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разница между кластерным индексом и первичным ключом  [new]
relief
Member

Откуда:
Сообщений: 1197
Поймал себя на мысли что не знаю точной разницы между этими терминами.
Объясните, кому не сложно

И еще вопрос.
читаю книгу по T-SQL
Есть такой отрывок
автор
"Последовательный кластерный первичный ключ может привести к тому, что пользователи будут претендовать на одну и ту же область в базе данных при добавлении записей, тем самым создавая "горячую точку". По возможности избегайте этого, используя кластерные ключи, распределяющие данные по таблице равномерно.


Поясните пожалуйста на примере, что имеется ввиду.

Спасибо!
26 мар 13, 22:20    [14099167]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
relief
Поймал себя на мысли что не знаю точной разницы между этими терминами.
Объясните, кому не сложно
Уникальность первичного ключа физически обеспечивается индексом, который может быть как кластерный, так и не кластерный.
26 мар 13, 23:10    [14099334]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
relief
автор
"Последовательный кластерный первичный ключ может привести к тому, что пользователи будут претендовать на одну и ту же область в базе данных при добавлении записей, тем самым создавая "горячую точку". По возможности избегайте этого, используя кластерные ключи, распределяющие данные по таблице равномерно.


Поясните пожалуйста на примере, что имеется ввиду.

Спасибо!
В нынешних реалиях пронаблюдать "хотспот" вы можете в виде ожиданий на латчах, когда несколько десятков или сотен коннектов будут лить в конец индекса пять-десять тысяч записей в секунду. Поищите поиском, есть вайтпепер, описывающий проблему и ее решение.
26 мар 13, 23:12    [14099343]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
LogrusAS
Member

Откуда: Киев
Сообщений: 194
Еще одно важное отличие:
Кластерный индекс не обязательно уникальный. А даже если уникальный, то позволяет поля с NULL.

Первичный ключ всегда уникален и не может содержать NULL.
27 мар 13, 11:42    [14100728]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3273
LogrusAS
Еще одно важное отличие:
Кластерный индекс не обязательно уникальный. А даже если уникальный, то позволяет поля с NULL.
Внутри, на уровне БД, кластерный индекс всегда уникален. Иначе не получится однозначно адресовать строки в таблице.

Но снаружи этого может быть не видно, да.
27 мар 13, 12:54    [14101313]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
LogrusAS
Member

Откуда: Киев
Сообщений: 194
Это Вам так хочется. Наличие NULL внутри уже отсутствие уникальности.
27 мар 13, 15:22    [14102344]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
LogrusAS
Это Вам так хочется. Наличие NULL внутри уже отсутствие уникальности.

Это в теории
27 мар 13, 15:25    [14102376]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
unique_index
Guest
Ennor Tiegael
Внутри, на уровне БД, кластерныйлюбой (про новомодный columnstore не уверен) индекс всегда уникален Иначе не получится однозначно адресовать строки в таблице


поправил ;)
27 мар 13, 15:34    [14102466]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
unique_index
Guest
LogrusAS
Это Вам так хочется. Наличие NULL внутри уже отсутствие уникальности.

попробуйте вставить больше (2^32)+1 (4 байта + 1) записей со значением ключа = NULL в неуникальный кластерный индекс, и получите ошибку с кодом 666.
;)
27 мар 13, 15:43    [14102572]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
relief
Member

Откуда:
Сообщений: 1197
unique_index
LogrusAS
Это Вам так хочется. Наличие NULL внутри уже отсутствие уникальности.

попробуйте вставить больше (2^32)+1 (4 байта + 1) записей со значением ключа = NULL в неуникальный кластерный индекс, и получите ошибку с кодом 666.
;)


неохота писать код.
а что за ошибка и с чем она связана?
27 мар 13, 21:54    [14104464]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Например, http://support.microsoft.com/kb/982441/en
27 мар 13, 22:46    [14104590]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
unique_index
Guest
relief
unique_index
пропущено...

попробуйте вставить больше (2^32)+1 (4 байта + 1) записей со значением ключа = NULL в неуникальный кластерный индекс, и получите ошибку с кодом 666.
;)


неохота писать код.
а что за ошибка и с чем она связана?

эта ошибка связана с тем, что к неуникальным значения в кластерном индексе sql сервер добавляет 4-x байтовый уникализатор, и когда его возможности заканчиваются (становиться больше 4 байт записей с один значением ключа), ему (серверу) ни чего не остаются как сдаться и сообщит об ошибке, код которой 666
28 мар 13, 10:03    [14105550]     Ответить | Цитировать Сообщить модератору
 Re: Разница между кластерным индексом и первичным ключом  [new]
unique_index
Guest
unique_index
relief
пропущено...


неохота писать код.
а что за ошибка и с чем она связана?

эта ошибка связана с тем, что к неуникальным значения в кластерном индексе sql сервер добавляет 4-x байтовый уникализатор, и когда его возможности заканчиваются (становиться больше 4 байт записей с один значением ключа), ему (серверу) ни чего не остаются как сдаться и сообщит об ошибке, код которой 666



ну и текст ошибки
select *
from sys.messages
where message_id = 666
28 мар 13, 10:04    [14105558]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить