преобразование кластерного индекса в некластеризованный индекс?

Можно ли преобразовать кластерный индекс в некластеризованный индекс или некластеризованный индекс в кластерный индекс в sql server 2005.

Преобразуйте этот запрос в кластерный индекс:

create index index1 on mytable(firstcolumn)

Преобразуйте этот запрос в некластеризованный индекс:

create clustered index clusindex1 on mytable(cluscolumn)

person naveenkumar    schedule 29.08.2010    source источник


Ответы (3)


Это больше, чем кажется на первый взгляд

для создания кластерного индекса

drop index mytable.clusindex1 
go

create clustered index clusindex1 on mytable(cluscolumn)

для создания некластеризованного индекса

drop index mytable.clusindex1 
go

create index clusindex1 on mytable(cluscolumn) --non clustered is default

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

Я бы посоветовал узнать, как работает индексирование в Книгах в Интернете, прежде чем вы начнете удалять и воссоздавать индексы.

person SQLMenace    schedule 29.08.2010
comment
Если вы добавляете индекс со всеми столбцами (либо в индекс, либо в качестве включенных столбцов), это в основном то же самое, что и второй кластеризованный индекс. - person Andomar; 29.08.2010
comment
Это не сработает, если ширина вашей таблицы превышает 900 байт или в вашей таблице более 16 столбцов. - person SQLMenace; 29.08.2010
comment
Вы можете иметь до 1023 включенных столбцов любой ширины AFAIK. - person Martin Smith; 29.08.2010

Это не запросы; это команды DDL. Отбросьте и заново создайте индексы по желанию, например:

drop index mytable.index1
go

create nonclustered index index1 on mytable (firstcolumn asc)
go
person Tahbaza    schedule 29.08.2010

Я также хотел знать, можно ли преобразовать (изменить) кластерный индекс в некластеризованный индекс. Я не верю, что это возможно. Сначала необходимо удалить существующий кластеризованный индекс, а затем создать новый некластеризованный индекс (возможно, с тем же именем, что и кластерный индекс). То же самое верно и для преобразования некластеризованного индекса в кластеризованный.

Я понятия не имею, почему вы просите преобразовать «запросы», но @Tahbaza верна в том смысле, что код, который вы включили в свой вопрос, на самом деле не является запросом. Это операторы T-SQL для внесения изменений в «определения данных» (т.е. схему [структуру] вашей базы данных).

person Kenny Evitt    schedule 20.04.2012