天天看點

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

使用SSMS資料庫管理工具修改索引

使用表設計器修改索引

表設計器可以修改任何類型的索引,修改索引的步驟相同,本示例為修改唯一非聚集索引。

1、連接配接資料庫,選擇資料庫,選擇資料表-》右鍵點選表-》選擇設計。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

2、在表設計器視窗-》選擇要修改的資料列-》右鍵點選-》選擇要修改的索引類型。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

3、在彈出框中-》選擇要修改的索引-》找到要修改的索引屬性進行修改-》修改完成點選關閉。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

4、點選儲存按鈕或者ctrl+s》關閉表設計器-》重新整理表-》檢視結果。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

使用對象資料總管修改索引

1、連接配接資料庫,選擇資料庫,選擇資料表-》展開資料表-》展開索引-》選擇要修改的索引-》右鍵點選-》選擇屬性(如果展開索引以後不能選擇屬性,重新整理資料庫和資料表重新嘗試)。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

2、在索引屬性彈出框-》選擇你要修改的屬性-》修改完成點選确定。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

3、再次點開屬性檢視修改結果。

SQLServer之修改索引使用SSMS資料庫管理工具修改索引使用T-SQL腳本修改索引

使用T-SQL腳本修改索引

修改索引列

若要添加、删除或更改索引列的位置,必須删除并重新建立該索引,詳細可以參考本人之前寫的建立索引。

修改索引屬性

使用SQL腳本設定了幾個選項

文法:

/修改索引部分屬性/

--聲明資料庫引用

use 資料庫名;

go

--修改索引屬性

alter index 索引名

on 表名

set(

--statistics_norecompute:指定是否重新計算統計資訊。

--statistics_norecompute=on:過時的統計資訊不會自動重新計算。

--statistics_norecompute=off:啟用自動統計資訊更新。

statistics_norecompute={ on | off },

--ignore_dup_key:指定在插入操作嘗試向唯一索引插入重複鍵值時的響應類型。 IGNORE_DUP_KEY 選項僅适用于建立或重新生成索引後發生的插入操作。 當執行 CREATE INDEX、ALTER INDEX 或 UPDATE 時,該選項無效。 預設為 OFF。

--ignore_dup_key=on:打開,将重複鍵值插入唯一索引時會出現警告消息。隻有違反唯一性的行為才會失敗。

--ignore_dup_key=off:關閉,将重複鍵值插入唯一索引時會出現錯誤消息。復原整個INSERT操作。對于對視圖建立的索引、非唯一索引、XML 索引、空間索引以及篩選的索引,IGNORE_DUP_KEY 不能設定為 ON

ignore_dup_key={ on | off },

--allow_row_locks:指定是否允許行鎖。

--allow_row_locks=on:通路索引時允許行鎖。資料庫引擎确定何時使用行鎖。

--allow_row_locks=off:不使用行鎖。

allow_row_locks={ on | off },

--allow_page_locks:指定是否允許使用頁鎖。

--allow_page_locks=on:通路索引時允許頁鎖。資料庫引擎确定何時使用頁鎖。

--allow_page_locks=off:不使用頁鎖。

allow_page_locks={ on | off }

);

go

示例:

/修改索引屬性/

--聲明資料庫引用

use testss;

go

--修改索引屬性

alter index uniquenonclus2

on test1

set(

--statistics_norecompute:指定是否重新計算統計資訊。

--statistics_norecompute=on:過時的統計資訊不會自動重新計算。

--statistics_norecompute=off:啟用自動統計資訊更新。

statistics_norecompute=on,

--ignore_dup_key:指定在插入操作嘗試向唯一索引插入重複鍵值時的響應類型。 IGNORE_DUP_KEY 選項僅适用于建立或重新生成索引後發生的插入操作。 當執行 CREATE INDEX、ALTER INDEX 或 UPDATE 時,該選項無效。 預設為 OFF。

--ignore_dup_key=on:打開,将重複鍵值插入唯一索引時會出現警告消息。隻有違反唯一性的行為才會失敗。

--ignore_dup_key=off:關閉,将重複鍵值插入唯一索引時會出現錯誤消息。復原整個INSERT操作。對于對視圖建立的索引、非唯一索引、XML 索引、空間索引以及篩選的索引,IGNORE_DUP_KEY 不能設定為 ON

ignore_dup_key=off,

--allow_row_locks:指定是否允許行鎖。

--allow_row_locks=on:通路索引時允許行鎖。資料庫引擎确定何時使用行鎖。

--allow_row_locks=off:不使用行鎖。

allow_row_locks=on,

--allow_page_locks:指定是否允許使用頁鎖。

--allow_page_locks=on:通路索引時允許頁鎖。資料庫引擎确定何時使用頁鎖。

--allow_page_locks=off:不使用頁鎖。

allow_page_locks=on

);

go

使用SQL腳本重新生成現有索引

文法:

/修改索引部分屬性/

--聲明資料庫引用

use 資料庫名;

go

--該示例重新生成現有索引,并在重新生成操作過程中應用指定的填充因子。

alter index 索引名

on 表名

rebuild with(

--pad_index:指定索引填充

--pad_index=on:FILLFACTOR 指定的可用空間百分比應用于索引的中間級頁。

--pad_index=off或未指定 fillfactor:考慮到中間級頁上的鍵集,可以将中間級頁幾乎填滿,但至少要為最大索引行留出足夠空間。

pad_index={ on | off },

--statistics_norecompute:指定是否重新計算統計資訊。

--statistics_norecompute=on:過時的統計資訊不會自動重新計算。

--statistics_norecompute=off:啟用自動統計資訊更新。

statistics_norecompute={ on | off },

--sort_in_tempdb:指定是否将排序結果存儲在 tempdb 中。

--sort_in_tempdb=on:在tempdb中存儲用于生成索引的中間排序結果。如果tempdb與使用者資料庫不在同一組磁盤上,就可縮短建立索引所需的時間。但是,這會增加索引生成期間所使用的磁盤空間量。

--sort_in_tempdb=off:中間排序結果與索引存儲在同一資料庫中。

sort_in_tempdb={ on | off },

--ignore_dup_key:指定在插入操作嘗試向唯一索引插入重複鍵值時的響應類型。 IGNORE_DUP_KEY 選項僅适用于建立或重新生成索引後發生的插入操作。 當執行 CREATE INDEX、ALTER INDEX 或 UPDATE 時,該選項無效。 預設為 OFF。

--ignore_dup_key=on:打開,将重複鍵值插入唯一索引時會出現警告消息。隻有違反唯一性的行為才會失敗。

--ignore_dup_key=off:關閉,将重複鍵值插入唯一索引時會出現錯誤消息。復原整個INSERT操作。對于對視圖建立的索引、非唯一索引、XML 索引、空間索引以及篩選的索引,IGNORE_DUP_KEY 不能設定為 ON

ignore_dup_key={ on | off },

--online:指定在索引操作期間基礎表和關聯的索引是否可用于查詢和資料修改操作。 預設為 OFF。 REBUILD 可作為 ONLINE 操作執行。

--online=on:在索引操作期間不持有長期表鎖。 在索引操作的主要階段,源表上隻使用意向共享 (IS) 鎖。

--這使得能夠繼續對基礎表和索引進行查詢或更新。

--操作開始時,在很短的時間内對源對象持有共享 (S) 鎖。

--操作結束時,如果建立非聚集索引,将在短期内擷取對源的 S(共享)鎖;

--當聯機建立或删除聚集索引時,以及重新生成聚集或非聚集索引時,将在短期内擷取 SCH-M(架構修改)鎖。 但聯機索引鎖是短的中繼資料鎖,特别是 Sch-M 鎖必須等待此表上的所有阻塞事務完成。

--在等待期間,Sch-M 鎖在通路同一表時阻止在此鎖後等待的所有其他事務。 對本地臨時表建立索引時,ONLINE 不能設定為 ON。

--online=off:在索引操作期間應用表鎖。這樣可以防止所有使用者在操作期間通路基礎表。

--建立、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脫機索引操作将對表擷取架構修改 (Sch-M) 鎖。

--這樣可以防止所有使用者在操作期間通路基礎表。 建立非聚集索引的脫機索引操作将對表擷取共享 (S) 鎖。 這樣可以防止更新基礎表,但允許讀操作(如 SELECT 語句)。

online={ on | off },

--allow_row_locks:指定是否允許行鎖。

--allow_row_locks=on:通路索引時允許行鎖。資料庫引擎确定何時使用行鎖。

--allow_row_locks=off:不使用行鎖。

allow_row_locks={ on | off },

--allow_page_locks:指定是否允許使用頁鎖。

--allow_page_locks=on:通路索引時允許頁鎖。資料庫引擎确定何時使用頁鎖。

--allow_page_locks=off:不使用頁鎖。

allow_page_locks={ on | off },

--fillfactor=n:指定一個百分比,訓示在資料庫引擎建立或修改索引的過程中,應将每個索引頁面的葉級填充到什麼程度。 指定的值必須是 1 到 100 之間的整數。 預設值為 0。

fillfactor=n,

--maxdop=max_degree_of_parallelism:在索引操作期間替代 max degree of parallelism 配置選項。 有關詳細資訊,請參閱 配置 max degree of parallelism 伺服器配置選項。 使用 MAXDOP 可以限制在執行并行計劃的過程中使用的處理器數量。 最大數量為 64 個處理器。

--max_degree_of_parallelism 可以是:

--1 - 取消生成并行計劃。

-->1 - 将并行索引操作中使用的最大處理器數量限制為指定數量。

--0(預設值)- 根據目前系統工作負荷使用實際數量的處理器或更少數量的處理器。

--有關詳細資訊,請參閱 配置并行索引操作。

maxdop=1

--data_compression=row:為指定的表、分區号或分區範圍指定資料壓縮選項。 選項如下所示:

--none

--不壓縮表或指定的分區。 僅适用于行存儲表;不适用于列存儲表。

--row

--使用行壓縮來壓縮表或指定的分區。 僅适用于行存儲表;不适用于列存儲表。

--page

--使用頁壓縮來壓縮表或指定的分區。 僅适用于行存儲表;不适用于列存儲表。

--columnstore

--适用範圍: SQL Server 2014 (12.x) 到 SQL Server 2017。

--僅适用于列存儲表。 COLUMNSTORE 指定對使用 COLUMNSTORE_ARCHIVE 選項壓縮的分區進行解壓縮。 還原資料時,将繼續通過用于所有列存儲表的列存儲壓縮對 COLUMNSTORE 索引進行壓縮。

--columnstore_archive

--适用範圍: SQL Server 2014 (12.x) 到 SQL Server 2017。

--僅适用于列存儲表,這是使用聚集列存儲索引存儲的表。 COLUMNSTORE_ARCHIVE 會進一步将指定分區壓縮到更小。 這可用于存檔,或者用于要求更少存儲并且可以付出更多時間來進行存儲和檢索的其他情形

--data_compression=row --注意:隻有 SQL Server Enterprise Edition 支援壓縮。

--on partitions ( { <partition_number_expression> | <range> } [ ,...n ] ) 适用範圍: SQL Server 2008 到 SQL Server 2017。

--指定對其應用 DATA_COMPRESSION 設定的分區。 如果表未分區,ON PARTITIONS 參數将生成錯誤。 如果不提供 ON PARTITIONS 子句,DATA_COMPRESSION 選項将應用于已分區表的所有分區。

--可以按以下方式指定 <partition_number_expression>:

--提供一個分區号,例如:ON PARTITIONS (2)。

--提供若幹單獨分區的分區号并用逗号将它們隔開,例如:ON PARTITIONS (1, 5)。

--同時提供範圍和單個分區,例如:ON PARTITIONS (2, 4, 6 TO 8)。

--<range> 可以指定為以單詞 TO 隔開的分區号,例如:ON PARTITIONS (6 TO 8)。

--,請多次指定 DATA_COMPRESSION 選項

--on partitions(1-2) --注意:分區之前表一定要有分區方案

);

go

示例:

/修改索引部分屬性/

--聲明資料庫引用

use testss;

go

--該示例重新生成現有索引,并在重新生成操作過程中應用指定的填充因子。

alter index uniquenonclus2

on test1

rebuild with(

--pad_index:指定索引填充

--pad_index=on:FILLFACTOR 指定的可用空間百分比應用于索引的中間級頁。

--pad_index=off或未指定 fillfactor:考慮到中間級頁上的鍵集,可以将中間級頁幾乎填滿,但至少要為最大索引行留出足夠空間。

pad_index=on,

--statistics_norecompute:指定是否重新計算統計資訊。

--statistics_norecompute=on:過時的統計資訊不會自動重新計算。

--statistics_norecompute=off:啟用自動統計資訊更新。

statistics_norecompute=off,

--sort_in_tempdb:指定是否将排序結果存儲在 tempdb 中。

--sort_in_tempdb=on:在tempdb中存儲用于生成索引的中間排序結果。如果tempdb與使用者資料庫不在同一組磁盤上,就可縮短建立索引所需的時間。但是,這會增加索引生成期間所使用的磁盤空間量。

--sort_in_tempdb=off:中間排序結果與索引存儲在同一資料庫中。

sort_in_tempdb=off,

--ignore_dup_key:指定在插入操作嘗試向唯一索引插入重複鍵值時的響應類型。 IGNORE_DUP_KEY 選項僅适用于建立或重新生成索引後發生的插入操作。 當執行 CREATE INDEX、ALTER INDEX 或 UPDATE 時,該選項無效。 預設為 OFF。

--ignore_dup_key=on:打開,将重複鍵值插入唯一索引時會出現警告消息。隻有違反唯一性的行為才會失敗。

--ignore_dup_key=off:關閉,将重複鍵值插入唯一索引時會出現錯誤消息。復原整個INSERT操作。對于對視圖建立的索引、非唯一索引、XML 索引、空間索引以及篩選的索引,IGNORE_DUP_KEY 不能設定為 ON

ignore_dup_key=off,

--online:指定在索引操作期間基礎表和關聯的索引是否可用于查詢和資料修改操作。 預設為 OFF。 REBUILD 可作為 ONLINE 操作執行。

--online=on:在索引操作期間不持有長期表鎖。 在索引操作的主要階段,源表上隻使用意向共享 (IS) 鎖。

--這使得能夠繼續對基礎表和索引進行查詢或更新。

--操作開始時,在很短的時間内對源對象持有共享 (S) 鎖。

--操作結束時,如果建立非聚集索引,将在短期内擷取對源的 S(共享)鎖;

--當聯機建立或删除聚集索引時,以及重新生成聚集或非聚集索引時,将在短期内擷取 SCH-M(架構修改)鎖。 但聯機索引鎖是短的中繼資料鎖,特别是 Sch-M 鎖必須等待此表上的所有阻塞事務完成。

--在等待期間,Sch-M 鎖在通路同一表時阻止在此鎖後等待的所有其他事務。 對本地臨時表建立索引時,ONLINE 不能設定為 ON。

--online=off:在索引操作期間應用表鎖。這樣可以防止所有使用者在操作期間通路基礎表。

--建立、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脫機索引操作将對表擷取架構修改 (Sch-M) 鎖。

--這樣可以防止所有使用者在操作期間通路基礎表。 建立非聚集索引的脫機索引操作将對表擷取共享 (S) 鎖。 這樣可以防止更新基礎表,但允許讀操作(如 SELECT 語句)。

online=off,

--allow_row_locks:指定是否允許行鎖。

--allow_row_locks=on:通路索引時允許行鎖。資料庫引擎确定何時使用行鎖。

--allow_row_locks=off:不使用行鎖。

allow_row_locks=on,

--allow_page_locks:指定是否允許使用頁鎖。

--allow_page_locks=on:通路索引時允許頁鎖。資料庫引擎确定何時使用頁鎖。

--allow_page_locks=off:不使用頁鎖。

allow_page_locks=on,

--fillfactor=n:指定一個百分比,訓示在資料庫引擎建立或修改索引的過程中,應将每個索引頁面的葉級填充到什麼程度。 指定的值必須是 1 到 100 之間的整數。 預設值為 0。

fillfactor=1,

--maxdop=max_degree_of_parallelism:在索引操作期間替代 max degree of parallelism 配置選項。 有關詳細資訊,請參閱 配置 max degree of parallelism 伺服器配置選項。 使用 MAXDOP 可以限制在執行并行計劃的過程中使用的處理器數量。 最大數量為 64 個處理器。

--max_degree_of_parallelism 可以是:

--1 - 取消生成并行計劃。

-->1 - 将并行索引操作中使用的最大處理器數量限制為指定數量。

--0(預設值)- 根據目前系統工作負荷使用實際數量的處理器或更少數量的處理器。

--有關詳細資訊,請參閱 配置并行索引操作。

maxdop=1

--data_compression=row:為指定的表、分區号或分區範圍指定資料壓縮選項。 選項如下所示:

--none

--不壓縮表或指定的分區。 僅适用于行存儲表;不适用于列存儲表。

--row

--使用行壓縮來壓縮表或指定的分區。 僅适用于行存儲表;不适用于列存儲表。

--page

--使用頁壓縮來壓縮表或指定的分區。 僅适用于行存儲表;不适用于列存儲表。

--columnstore

--适用範圍: SQL Server 2014 (12.x) 到 SQL Server 2017。

--僅适用于列存儲表。 COLUMNSTORE 指定對使用 COLUMNSTORE_ARCHIVE 選項壓縮的分區進行解壓縮。 還原資料時,将繼續通過用于所有列存儲表的列存儲壓縮對 COLUMNSTORE 索引進行壓縮。

--columnstore_archive

--适用範圍: SQL Server 2014 (12.x) 到 SQL Server 2017。

--僅适用于列存儲表,這是使用聚集列存儲索引存儲的表。 COLUMNSTORE_ARCHIVE 會進一步将指定分區壓縮到更小。 這可用于存檔,或者用于要求更少存儲并且可以付出更多時間來進行存儲和檢索的其他情形

--data_compression=row --注意:隻有 SQL Server Enterprise Edition 支援壓縮。

--on partitions ( { <partition_number_expression> | <range> } [ ,...n ] ) 适用範圍: SQL Server 2008 到 SQL Server 2017。

--指定對其應用 DATA_COMPRESSION 設定的分區。 如果表未分區,ON PARTITIONS 參數将生成錯誤。 如果不提供 ON PARTITIONS 子句,DATA_COMPRESSION 選項将應用于已分區表的所有分區。

--可以按以下方式指定 <partition_number_expression>:

--提供一個分區号,例如:ON PARTITIONS (2)。

--提供若幹單獨分區的分區号并用逗号将它們隔開,例如:ON PARTITIONS (1, 5)。

--同時提供範圍和單個分區,例如:ON PARTITIONS (2, 4, 6 TO 8)。

--<range> 可以指定為以單詞 TO 隔開的分區号,例如:ON PARTITIONS (6 TO 8)。

--,請多次指定 DATA_COMPRESSION 選項

--on partitions(1-2) --注意:分區之前表一定要有分區方案

);

go

修改索引名稱

文法:

/修改索引名稱/

--聲明資料庫引用

use 資料庫名;

go

--修改索引名稱

exec sp_rename N'表名.索引名',N'索引名',N'index';

go

示例:

/修改索引名稱/

--聲明資料庫引用

use testss;

go

--修改索引名稱

exec sp_rename N'test1.uniquenonclus1',N'uniquenonclus2',N'index';

go