SQL Server. Индексы в табличных переменных

SQL Server. Индексы в табличных переменных

Автор: Knyazev Alexey

Сегодня я немного расскажу о том, как создать индексы на табличных переменных (это которые @table) в SQL Server 2014 и в ранних версиях. При этом я не буду останавливаться на том, зачем нужны индексы и не буду сравнивать табличные переменные с временными таблицами, т.к. на эту тему достаточно статей, например: http://www.sql-server-performance.com/2007/temp-tables-vs-variables/ или http://www.mssqltips.com/sqlservertip/2825/sql-server-temp-table-vs-table-variable-performance-testing/. При этом сразу оговорюсь, что одним из недостатков табличных переменных было именно отсутствие возможности явно создать индекс. Но давайте по порядку.

В SQL Server 2012 и ниже мы действительно не можем явно создать индекс на нужном нам поле (полях), но существует несколько приёмов с созданием индексов через ограничения (PRIMARY KEY и UNIQUE). Пример ниже:

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 это стало возможно и в синтаксис добавили создание индекса на табличных переменных.

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';

Запись опубликована в рубрике Полезно и интересно с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: