1. 程式人生 > >SQL SERVER 聚集索引的建立

SQL SERVER 聚集索引的建立

索引加快檢索表中資料的方法,它對資料表中一個或者多個列的值進行結構排序,是資料庫中一個非常有用的物件。

索引的建立

#1使用企業管理器建立

啟動企業管理器--選擇資料庫------選在要建立索引的表------在表的下拉選單中選擇索引---在快捷選單中選擇新建索引--

在新建索引對話方塊中單擊“新增”按鈕,彈出“從列表中選擇列”,在該對話方塊中選擇要新增到索引鍵的表列

單擊確定返回新建索引對話方塊,再點選確定完成索引的建立。

#2使用T-sql語句建立索引。

create index語句為給定表或檢視建立一個改變物理順序的聚集索引,也可以建立一個具有查詢功能的非聚集索引。語法格式如下:

create [unique] [clustered] [nonclustered] index index_name

on {tabel/view} (column[dese/asc][....n])

注: [unique] [clustered] [nonclustered]表示要建立索引的型別,以此為唯一索引,聚集索引,和非聚集索引,當省略unique選項時,建立非唯一索引.當省略clustered,nonclustered選項時.建立聚集索引,省略nonclustered選項時,建立唯一聚集索引。

使用索引雖然可以提高系統的效能,增強資料檢索速度,但它需要佔用大量的物理儲存空間,建立索引的一般原則如下:

(1)只有表的所有者可以在同一表中建立索引。

(2)每個表中只能建立一個聚集索引。

(3)每個表中最多可以建立249個非聚集索引。

(4)在經常查詢的欄位上建立索引。

(5)定義text,image,bit資料型別的列上不要建立索引。

(6)在外間上可以建立索引。

(7)在主鍵列上一定要建立索引。

(8)在那些重複的值比較多,查詢較少的列上不要建立索引。

 

 

檢視索引

#1使用企業管理器檢視索引,步驟如下:

(1)啟動SQL Server management Studio並連線到SQLServer 2008資料庫

(2)選擇指定的資料庫,|展開要檢視索引的表。

(3)右擊該表,在彈出快捷選單中選擇‘設計’命令

(4)彈出‘表結構設計’對話方塊,右擊該對話方塊,在彈出的快捷選單中選擇‘索引/鍵’命令

(5)開啟“索引/鍵”對話方塊,在對話方塊左側選中某個索引,在對話方塊的右側就可以檢視此索引的資訊,並可以修改相關資訊。

#2使用系統儲存過程檢視索引,語法格式如下:

use database_name

EXEC Sp_helpindex table_name

#3利用系統表檢視索引資訊

檢視資料庫中指定表的索引資訊,可以利用該資料庫中的系統表sysobjects和sysindexes進行查詢,系統表sysobjects可以根據表明查詢到索引表的ID號,再利用系統表sysindexes根據ID號查詢到索引檔案的相關資訊。

 

索引的修改

#1使用企業管理器修改索引。

#2使用T-SQL語句更改索引名稱,語法格式如下:

use database_name

exec sp_rename ‘table_name.old_name’ ‘new_name’

注:要對索引進行重新命名時,需要修改的索引名格式必須為“表名.索引名”

 

索引的刪除

#1使用企業管理器刪除索引

#2使用T-SQL語句刪除索引,語法格式如下:

drop Index table_name.index_name,.....n

注:drop index語句不能刪除通過PRINARY KEY和UNIQUE約束建立的索引,若要刪除該約束相應的索引,請使用帶有DROP CONSTRAINT子句的ALTER TABLE.

 

如何刪除主鍵的聚集索引

當我們對一個表建立一個主鍵時,預設會給該主鍵列新增一條聚集索引,這是資料庫內部自動建立的,唯一性約束也會預設建立一個非聚集索引。

create table MyTable
(
   id int identity(1,1) primary key,
   name nvarchar(10) unique
)
  exec sp_helpindex MyTable

 

 

上面我們建立了一個主鍵id 和唯一性約束的name列,查看錶可以看到這時產生了兩個索引

聚集索引是一個寶貴的資源,在一些表的中有時我們永遠不會用到主鍵來作為查詢條件,或者作為其他表的外來鍵,這時主鍵的聚集索引

就顯得大才小用了,我們希望將聚集索引建立在其他真正需要的欄位,不過當我們執行刪除操作時會報以下錯誤

訊息 3723,級別 16,狀態 4,第 1 行
不允許對索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 顯式地使用 DROP INDEX。該索引正用於 PRIMARY KEY 約束的強制執行

不過我們可以先刪除主鍵約束,這樣聚集所以就自動刪除了

alter table MyTable drop constraint PK__MyTable__3213E83F145C0A3F

我們再看下聚集索引已經不存在了

當然唯一約束所引起的索引也可以同樣的方式操作,先刪除唯一約束

*****

刪除主鍵的聚集索引時,在表的設計中進行刪除主鍵即可,但同時應更新資料庫並重新新建查詢,從而顯示沒有了聚集索引的表。