2010-08-29 132 views
4

是否有可能一個聚集索引轉換爲非聚集索引或 非聚集索引聚集索引在SQL Server 2005將聚集索引轉換爲非聚集索引?

請轉換此查詢到聚集索引:

create index index1 on mytable(firstcolumn) 

請轉換此查詢轉化爲非聚集索引:

create clustered index clusindex1 on mytable(cluscolumn) 

回答

3

那些不是查詢;他們是DDL命令。 掉落並根據需要,像這樣重新創建索引:

drop index mytable.index1 
go 

create nonclustered index index1 on mytable (firstcolumn asc) 
go 
5

還有更多的它比滿足眼睛

創建聚簇索引

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子句)

我會說,查找如何索引在Books On Line中工作,然後再開始刪除和重新創建索引

+0

如果您添加一個包含所有列的索引(無論是在索引中還是作爲包含列),這與第二個聚簇索引基本相同 – Andomar 2010-08-29 18:03:50

+0

如果表的寬度超過900個字節或者如果您有您的表格中有16列以上 – SQLMenace 2010-08-29 18:20:00

+0

您可以有多達1023個包含任意寬度AFAIK的列。 – 2010-08-29 18:33:02

0

我還想知道聚集索引是否可以轉換(更改)爲非聚集索引。我不相信這是可以做到的。必須首先刪除現有的聚簇索引,然後才能創建新的非聚簇索引(可能與聚簇索引具有相同的名稱)。將非聚集索引轉換爲聚集索引也是如此。

我不知道你爲什麼要求'查詢'被轉換,但@Tahbaza是正確的,因爲你包含在你的問題中的代碼不是真正的查詢。它們是用於更改「數據定義」(即數據庫的架構[結構])的T-SQL語句。