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

Откуда: Москва
Сообщений: 2638
Некластеризованный индекс,
у него есть настройка (при создании) уникальный (галочка).
Подскажите когда нужно ставить эту галочку?

Сейчас я создал некластеризованный индекс с включенными полями.
А с галкой уникальный, не могу понять нужно ли её поставить?

(ниже описание не совсем понимаю, может кто-то объяснить простыми словами)
Уникальный (Unique) – это индекс, который обеспечивает отсутствие повторяющихся (одинаковых) значений ключа индекса, гарантируя тем самым уникальность строк по данному ключу. Уникальными могут быть как кластеризованные, так и некластеризованные индексы. Если создавать уникальный индекс по нескольким столбцам, индекс гарантирует уникальность каждой комбинации значений в ключе. При создании ограничений PRIMARY KEY или UNIQUE SQL сервер автоматически создает уникальный индекс для ключевых столбцов. Уникальный индекс может быть создан только в том случае, если у таблицы на текущий момент отсутствуют дублирующие значения по ключевым столбцам;
16 авг 19, 10:40    [21950786]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Konst_One
Member

Откуда:
Сообщений: 11492
слово "уникальный" не понятно? единственный и неповторимый, так яснее?
16 авг 19, 10:43    [21950790]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
trew
Member

Откуда: Москва
Сообщений: 2638
Konst_One,

не понятно зачем делать некластерный индекс уникальным.
16 авг 19, 10:45    [21950791]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Konst_One
Member

Откуда:
Сообщений: 11492
что у вас за таблица, покажите описание и какие там данные хранятся
16 авг 19, 10:45    [21950793]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1117
trew, даже как то теряешься - как ответить на такой вопрос участнику с 2,5 тысячами сообщений :)

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

Уникальность проверяется по набору ключевых полей - т.е. на включенные (INCLUDE) поля можно не смотреть.
16 авг 19, 10:47    [21950797]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6697
trew
Konst_One,

не понятно зачем делать некластерный индекс уникальным.

если не понятно - не делайте. Констрейн на уникальност не даст хранить не уникальные значения полей индекса. Нужно или нет вопрос бизнес логики.
16 авг 19, 10:48    [21950798]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1117
trew
Konst_One,

не понятно зачем делать некластерный индекс уникальным.
Например, затем, что у вас может быть несколько наборов данных, которым необходимо обеспечить уникальность. Или если вы делаете кластерным суррогатный ключ, при этом требуется еще обеспечить уникальность. Множество причин.
16 авг 19, 10:49    [21950800]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
trew
Member

Откуда: Москва
Сообщений: 2638
Konst_One
что у вас за таблица, покажите описание и какие там данные хранятся


1С таблица констант.
В одной таблице много констант хранятся. Обращений к таблице много, возникают блокировки.
Запросы выбирают все поля таблицы, а в индексах (двух) указано только часть полей.
Вот ms sql пробегает по индексу, а дальше бежит собирать остальные поля из таблицы (теряется время).
Я сделал некластерный индекс по полям поиска, и включил туда все остальные поля.
Теперь проблем нет с этой таблицей констант.

Только не понятно, нужно ли мне делать мой некластерный индекс уникальным (ставить галочку) ?
16 авг 19, 10:49    [21950801]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1117
trew
Только не понятно, нужно ли мне делать мой некластерный индекс уникальным (ставить галочку) ?

Если непонятно - скорее всего не надо.
16 авг 19, 10:50    [21950803]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Konst_One
Member

Откуда:
Сообщений: 11492
https://www.mssqltips.com/sqlservertutorial/9133/sql-server-nonclustered-indexes/
16 авг 19, 10:52    [21950807]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Konst_One
Member

Откуда:
Сообщений: 11492
trew
Konst_One
что у вас за таблица, покажите описание и какие там данные хранятся


1С таблица констант.
В одной таблице много констант хранятся. Обращений к таблице много, возникают блокировки.
Запросы выбирают все поля таблицы, а в индексах (двух) указано только часть полей.
Вот ms sql пробегает по индексу, а дальше бежит собирать остальные поля из таблицы (теряется время).
Я сделал некластерный индекс по полям поиска, и включил туда все остальные поля.
Теперь проблем нет с этой таблицей констант.

Только не понятно, нужно ли мне делать мой некластерный индекс уникальным (ставить галочку) ?


если все записи по этому индексу уникальны, то делайте, если могут быть повторы по вашей бизнес-задаче, то не делайте
16 авг 19, 10:54    [21950810]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
trew
Member

Откуда: Москва
Сообщений: 2638
Konst_One,
за ссылку спасибо. только там про уникальность не увидел.

У меня был в плане запроса Key Lookup.
А после создания некластерного индекса с включенными полями, всё выбирается из индекса.

Зачем эта галочка (уникальный) у некластерного индекса?
16 авг 19, 10:57    [21950817]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
trew
Member

Откуда: Москва
Сообщений: 2638
Konst_One
trew
пропущено...


1С таблица констант.
В одной таблице много констант хранятся. Обращений к таблице много, возникают блокировки.
Запросы выбирают все поля таблицы, а в индексах (двух) указано только часть полей.
Вот ms sql пробегает по индексу, а дальше бежит собирать остальные поля из таблицы (теряется время).
Я сделал некластерный индекс по полям поиска, и включил туда все остальные поля.
Теперь проблем нет с этой таблицей констант.

Только не понятно, нужно ли мне делать мой некластерный индекс уникальным (ставить галочку) ?


если все записи по этому индексу уникальны, то делайте, если могут быть повторы по вашей бизнес-задаче, то не делайте

Ура, кажется я понял.
Создаю индекс по трем полям. Если такие сочетания(три поля) могут повторятся - ставим галочку уникальный.

А если всегда ставить галочку уникальный у некластерного индекса, что плохо получится?
16 авг 19, 11:00    [21950821]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Konst_One
Member

Откуда:
Сообщений: 11492
если нужно обеспечить уникальность, а кластерного уникального нет в таблице
16 авг 19, 11:01    [21950824]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
trew
Member

Откуда: Москва
Сообщений: 2638
Спасибо всем за участие и помощь!
16 авг 19, 11:05    [21950829]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6965
trew,

уникальный индекс имеет смысл ключа. В таблице может быть определено несколько ключей. Откройте для себя реляционные механизмы, на которых базируется математика SQL Server.
16 авг 19, 11:18    [21950843]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2284
trew
Ура, кажется я понял.
Создаю индекс по трем полям. Если такие сочетания(три поля) могут повторятся - ставим галочку уникальный.
А если всегда ставить галочку уникальный у некластерного индекса, что плохо получится?

неправильно поняли. нужность "уникальности" не количеством полей определяется, не хорошестью/плохостью . а бизнес логикой. например нельзя чтобы пользователь создал две одинаковые позиции номенклатуры. чтобы не говородить проверки в коде, ставим уникальность по имени
16 авг 19, 12:54    [21950952]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
PizzaPizza
Member

Откуда:
Сообщений: 295
trew
Зачем эта галочка (уникальный) у некластерного индекса?


Уникальный = максимально селективный = самый быстрый и поэтому предпочитаемый оптимизатором вариант индекса. Хорошо делать все индексы уникальными, если вы можете себе это позволить согласно бизнес-логики.
17 авг 19, 18:54    [21951822]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2302
Владислав Колосов
trew,

уникальный индекс имеет смысл ключа. В таблице может быть определено несколько ключей. Откройте для себя реляционные механизмы, на которых базируется математика SQL Server.
Товарищ явно школу прогулял. Сразу за практику. Сейчас он еще спросит что такое ключ.
19 авг 19, 22:22    [21952953]     Ответить | Цитировать Сообщить модератору
 Re: Некластеризованный индекс уникальный  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2302
trew
Konst_One
пропущено...


если все записи по этому индексу уникальны, то делайте, если могут быть повторы по вашей бизнес-задаче, то не делайте

Ура, кажется я понял.
Создаю индекс по трем полям. Если такие сочетания(три поля) могут повторятся - ставим галочку уникальный.
Ровно наоборот.
19 авг 19, 22:24    [21952954]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить