SQL Server 2000 TSQL: создание индекса по табличной переменной - PullRequest
1 голос
/ 17 декабря 2009

Возможно ли следующее? Я не могу этого сделать. Нужно ли иметь постоянную таблицу для создания индекса?

declare @Beatles table
    (
        LastName varchar(20) ,      
        FirstName varchar(20) 
    )

CREATE CLUSTERED INDEX Index_Name_Clstd ON @Beatles(LastName)

Ответы [ 3 ]

2 голосов
/ 17 декабря 2009

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

Ограничения

Вы не можете создать некластеризованный индекс по табличной переменной, если только Индекс является побочным эффектом ПЕРВИЧНОГО КЛЮЧЕВОЕ или УНИКАЛЬНОЕ ограничение на столе (SQL Server применяет любые УНИКАЛЬНЫЕ или Основные ограничения с использованием индекс).

2 голосов
/ 17 декабря 2009

Не в табличной переменной, а во временной таблице, см. http://www.sqlteam.com/article/optimizing-performance-indexes-on-temp-tables

1 голос
/ 25 октября 2013

Согласно этому посту - ДА вы можете. Следующая декларация сгенерирует 2 индекса:

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

Первый индекс будет кластеризован и будет включать первичный ключ. Второй индекс будет не кластеризованным и будет включать столбцы, перечисленные в ограничении уникальности. Вот еще один пост, показывающий, как заставить оптимизатор запросов использовать динамически генерируемые индексы, потому что он будет стремиться их игнорировать (индексы будут генерироваться после оценки плана выполнения)

...