Как создать индекс по столбцу в табличной переменной - PullRequest
3 голосов
/ 26 января 2012

Допустим, я объявляю переменную таблицы с несколькими столбцами в ней.

объявляем таблицу @MyContacts (

// определения столбцов в ней

);

Допустим, у меня есть столбец A, как я могу проиндексировать его в SQL Server 2008.

Ответы [ 4 ]

5 голосов
/ 26 января 2012

Если у вас достаточно большая таблица для индекса, не делайте этого в табличной переменной, делайте это во временной таблице!

Переменные таблицы имеют все виды ограничений, в том числе:

  • Нет статистики - оптимизатор всегда предполагает, что у них есть одна строка
  • Нет некластеризованных индексов (кроме ограничений)
  • Отсутствие видимости за пределами непосредственной области действия - подпроцесс не может получить доступ к вашей табличной переменной.
  • Вне объема транзакций - вы не можете ROLLBACK ничего сделать с табличной переменной, поскольку она не записана в журнале транзакций

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

3 голосов
/ 26 января 2012

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

DECLARE @Users TABLE
(
    UserID  INT PRIMARY KEY,
    UserName varchar(50),
    UNIQUE (UserName)
)

Для получения дополнительной информации, чек ЭТОТ статья.

1 голос
/ 26 января 2012

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

declare @MyContacts table (columnA int unique nonclustered ...)
1 голос
/ 26 января 2012
declare @YourTempTable table
( 
    ID int not null primary key,
    Name nvarchar(255) null
) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...