Сегодня я немного расскажу о том, как создать индексы на табличных переменных (это которые @table) в SQL Server 2014 и в ранних версиях.
При этом я не буду останавливаться на том, зачем нужны индексы и не буду сравнивать табличные переменные с временными таблицами, т.к. на эту тему достаточно статей, например:
http://www.sql-server-performance.com/2007/temp-tables-vs-variables/ или
При этом сразу оговорюсь, что одним из недостатков табличных переменных было именно отсутствие возможности явно создать индекс. Но давайте по порядку.
В SQL Server 2012 и ниже мы действительно не можем явно создать индекс на нужном нам поле (полях), но существует несколько приёмов с созданием индексов через ограничения (PRIMARY KEY и UNIQUE). Пример ниже:
1
2
3
4
5
6
7
8
9
10
|
declare @ table table ( id int primary key , a varchar (10) , b datetime , c money , unique (a,c) ); select * from @ table where id > 0; select a, c from @ table where a is not null ; |
И всё бы хорошо, но как создать неуникальный индекс? И вот теперь, начиная с SQL Server 2014 это стало возможно и в синтаксис добавили создание индекса на табличных переменных.
1
2
3
4
5
6
7
8
9
|
declare @ table table ( id int primary key , a varchar (10) , b datetime , c money , unique (a,c) , index ix_b nonclustered (b, a, c) ); select a, c from @ table where b > '20140101' ; |
Автор: Алексей Князев
Оригинальная ссылка: http://www.t-sql.ru/post/index_on_table_variable.aspx