Могу ли я создать индекс для пользовательских переменных таблицы? - PullRequest
1 голос
/ 23 февраля 2011

Просто хотел проверить, сможем ли мы создавать индексы для определяемых пользователем переменных таблицы.Я знаю, что мы можем создать PK на UDT.Означает ли это, что PK создает (кластеризованный) индекс внутри?Если для столбца в UDT возможен индекс, где хранятся индексированные данные?

Ответы [ 3 ]

4 голосов
/ 16 декабря 2013

Чтобы определить индекс для табличной переменной, используйте ограничение primary key или unique.Вы можете назначить один кластеризованный.

  • Если вам нужен индекс для неуникального поля, просто добавьте уникальный ключ в конец списка столбцов индекса, чтобы сделать его уникальным.

  • Если переменная таблицы не имеет уникального поля, добавьте фиктивное уникальное поле, используя столбец идентификаторов.

Примерно так:

declare @t table (
    dummy identity primary key nonclustered,
    val1 nvarchar(50),
    val2 nvarchar(50),
    unique clustered (val1, dummy)
) 

Теперь у вас есть табличная переменная с кластеризованным индексом для неуникального поля val1.

3 голосов
/ 23 февраля 2011

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

Вы не можете определить произвольные индексы длятакие таблицы.

0 голосов
/ 26 февраля 2011

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

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