[SQL] SSMS 如何開啟產生索引指令碼選項 (HOW TO:Open SSMS Create Index Command Option)

[SQL] SSMS 如何開啟產生索引指令碼選項 (HOW TO:Open SSMS Create Index Command Option)

筆者進日在轉移 Table Schema 時,發生使用 SSMS 產生指令碼時,未產生索引指令碼資訊,由於若未將索引指令碼新增於新 Database

將會導致索引執行效能上之問題,故在此提出解決方式。

 

若您也有此問題,可依下列步驟進行 SSMS 進階選項調整:

1. 開啟 SQL Server Management Studio (SSMS)。

2. 選擇 [工具] --> 點選 [選項]。

    Select Option From Tool

 

3. 開啟 [SQL Server 物件總管] 選項 --> 點選 [指令碼]。

4. 於右方選擇 [編寫索引的指令碼] --> 選擇 [True] (預設為 False)

    Change Command Option

 

筆者進行以下些實驗,若您想進一步了解該選項影響範圍,請對以下內容進行了解:

1. 請將上述 [編寫索引的指令碼] 調整為 False。

2. 請依以下圖型新增 Table,並將該 Table Name 設定成 Test。

   Create Table

 

3. 對 Test Table 開啟 [設計] 介面,並將 AA 欄位設定為 [主索引鍵]。

    Create Table By PK

 

4. 產生指令碼時,得知會產生 [主索引鍵] 資訊如下:

   1:  CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
   2:  (
   3:      [AA] ASC
   4:  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

 

5. 對 Test Table 開啟 [索引/索引鍵] 管理介面,並將 BB 欄位設定為 [唯一索引鍵]。

    Add Once Index

 

6. 產生指令碼時,得知會產生 [唯一索引鍵] 資訊如下:

   1:  CONSTRAINT [IX_Test_BB] UNIQUE NONCLUSTERED 
   2:  (
   3:      [BB] ASC
   4:  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

 

7. 對 Test Table 開啟 [索引/索引鍵] 管理介面,並將 CC 欄位設定為 [索引] 且為 [非唯一]。

    Add Index By Not Once

 

8. 產生指令碼時,無法取得 [索引] 且為 [非唯一] 資訊

9. 對 Test Table 開啟 [索引/索引鍵] 管理介面,並將 DD 欄位設定為 [索引] 且為 [唯一]。

    Add Index By Once

 

10. 產生指令碼時,亦無法取得 [索引] 且為 [唯一] 資訊

11. 依本文內容將 [編寫索引的指令碼] 調整為 True

12. 再進行產生指令碼時,皆可取得 [索引] 且為 [非唯一] 或 [唯一] 資訊如下:

     [索引] 且為 [非唯一]

   1:  CREATE NONCLUSTERED INDEX [IX_Test_CC] ON [dbo].[Test] 
   2:  (
   3:      [CC] ASC
   4:  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

     [索引] 且為 [唯一]

   1:  CREATE UNIQUE NONCLUSTERED INDEX [IX_Test_DD] ON [dbo].[Test] 
   2:  (
   3:      [DD] ASC
   4:  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

 

 

由以上實驗可得知,若您亦有此需求時可將 [編寫索引的指令碼] 調整為 True,

請注意,當您將產生之指令碼於新 Database 上執行前,需將使用的 Database Name 進行修改

(Ex:USE [Test_Before] 修改為 USE [Test_After])

分享