Кластерный индекс для временной таблицы - PullRequest
4 голосов
/ 05 октября 2011

Я пытаюсь оптимизировать процедуру с кодом, подобным следующему:

CREATE TABLE #t1 (c1 int, c2 varchar(20), c3(varchar(50)...)

CREATE CLUSTERED INDEX ix_t1 ON #t1(c3) ON [PRIMARY]

Я хотел улучшить это, переместив индекс CLUSTERED в объявление таблицы (более удобный для кэширования), но c3 не уникален, поэтому это не работает:

CREATE TABLE #t1 (c1 int, c2 varchar(20), c3 varchar(50)..., UNIQUE CLUSTERED (c3))

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

Ответы [ 3 ]

2 голосов
/ 04 октября 2017

Да, это возможно в SQL Server 2014 и выше, Создать таблицу на MSDN .С 2014 года вы можете указывать индексы, встроенные в оператор создания таблицы.

 if object_id('tempdb..#t1') is not null drop table #t1;

CREATE TABLE #t1 (
    c1 int, 
    c2 varchar(20), 
    c3 varchar(50), 

    index [CIX_c3] CLUSTERED (c3),
    index [IX_c1] nonclustered (c1)
)

insert #t1(c3) values ('a'), ('a'), ('a')

select * from #t1
1 голос
/ 05 октября 2011

Нет, нет ... существование возможности определять кластеризацию как параметр при создании таблицы заключается в поддержке объявления ограничений первичного ключа и уникального столбца, которые сами создают индексы. Другими словами, CLUSTERED в операторе CREATE TABLE указывает, должен ли индекс, созданный ограничением UNIQUE, быть кластеризованным или некластеризованным, что важно, поскольку таблица может иметь только один кластеризованный индекс.

0 голосов
/ 04 октября 2017

Это можно сделать, добавив столбец identity, например:

CREATE TABLE #t1 (rowID int not null identity(1,1),
                     c1 int, c2 varchar(20), c3 varchar(50),
                     UNIQUE CLUSTERED (c3,rowID)
                 )

Включение в индекс rowID обеспечит его уникальность, даже если c3 - нет.

Вы подтверждаете индекс, созданный с помощью:

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