SQL Server 創建和使用索引


創建索引:
(1)在SQL Server Management Studio中,選擇並右擊要創建索引的表,從彈出菜單中選擇“設計”,打開表設計器。右鍵單擊表設計器,從彈出菜單中選擇“索引/鍵”命令,打開“索引/鍵”對話框。對話框中列出了已經存在的索引,如下圖所示。
(2)單擊“添加”按鈕。在“選定的主/唯一鍵或索引”框顯示系統分配給新索引的名稱。
(3)在“列”屬性下選擇要創建索引的列。可以選擇多達16列。為獲得最佳性能,最好只選擇一列或兩列。對所選的每一列,可指出索引是按升序還是降序組織列值。
(4)如果要創建唯一索引,則在“是唯一的”屬性中選擇“是”。
(5)設置完成后,單擊“確定”按鈕。
(6)當保存表時,索引即創建在數據庫中。
使用CREATE INDEX語句創建索引:

復制內容到剪貼板
代碼:
CREATE[ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX索引名
    ON {表名|視圖名} (列名[ ASC | DESC ] [ ,...n ] )

例:
在數據庫HrSystem中為表Employees創建基於IDCard列的唯一索引IX_Employees,可以使用以下命令:

復制內容到剪貼板
代碼:
USE HrSystem
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_Employees]ONdbo.Employees(IdCard)
GO

例:
為表Employees創建基於列IDCard的唯一、聚集索引IX_Employees1,可以使用以下命令:

復制內容到剪貼板
代碼:
USE HrSystem
GO
CREATE UNIQUE CLUSTERED INDEX [IX_Employees1] ON [dbo].[Employees](IdCard)
GO

需要注意的是,在一個表中只允許存在一個聚集索引。因此,如果表Employees中已經存在一個聚集索引,則執行上面的語句時將會提示下面的錯誤信息。
消息1902,級別16,狀態3,第1行
無法對表'dbo.Employees'創建多個聚集索引。請在創建新聚集索引前刪除現有的聚集索引'PK__Employee__263E2DD300551192'。 例:
對表Employees的列Emp_name按照降序創建索引,可以使用以下命令:

復制內容到剪貼板
代碼:
USE HrSystem
GO
CREATENONCLUSTERED INDEX [IX_Employees2] ON [dbo].[Employees]
(
  [Emp_name] DESC
)
GO

在CREATE INDEX語句中使用INCLUDE子句,可以在創建索引時定義包含的非鍵列,其語法結構如下:

復制內容到剪貼板
代碼:
CREATENONCLUSTERED  INDEX 索引名
    ON { 表名| 視圖名 } ( 列名 [ ASC | DESC ] [ ,...n ] )
  INCLUDE (<列名1>, <列名2>, [,… n])

例: 在表Employees上創建非聚集索引IX_Wage,索引中的鍵列為Wage,非鍵列為Emp_name、Sex和Title,具體語句如下:

復制內容到剪貼板
代碼:
USEHrSystem
GO
CREATENONCLUSTERED  INDEX IX_Wage
  ON Employees ( Wage )
  INCLUDE (Emp_name, Sex, Title)
GO

例: 在創建索引IX_Wage后,當表Employees中的數據量比較大時,執行下面的SELECT語句將會明顯地改進查詢效率。

復制內容到剪貼板
代碼:
USEHrSystem
GO
SELECTEmp_name, Sex, Title, Wage
FROMEmployees
WHEREWage BETWEEN 1000 AND 3000
GO

修改索引:
        在SQL Server Management Studio中,選擇並右擊要創建索引的表,從彈出的菜單中選擇“設計表”,打開表設計器。右鍵單擊表設計器,從彈出菜單中選擇“索引/鍵”命令,打開“索引/鍵”對話框,並查看已經存在的索引及修改索引的屬性信息。
也可以使用ALTER INDEX語句修改索引,其基本語法如下:

復制內容到剪貼板
代碼:
ALTER INDEX { 索引名| ALL }
    ON <表名|視圖名>
    { REBUILD  | DISABLE  | REORGANIZE }[ ; ]

ALTER INDEX語句的參數比較復雜,這里只介紹它的基本使用情況。參數說明如下:
REBUILD指定重新生成索引。 DISABLE指定將索引標記為已禁用。 REORGANIZE指定將重新組織的索引葉級。
例:
要禁用索引IX_Employees,可以使用下面的語句:

復制內容到剪貼板
代碼:
USE HrSystem
GO
ALTERINDEX IX_Employees ON Employees DISABLE
GO

刪除索引:
        在SQL Server Management Studio中,選擇並右擊要創建索引的表,從彈出的菜單中選擇“設計表”。打開表設計器。右鍵單擊表設計器,從彈出菜單中選擇“索引/鍵”命令,在打開的“索引/鍵”對話框中列出了已經存在的索引。單擊“刪除”按鈕,即可刪除索引信息。

復制內容到剪貼板
代碼:
DROP INDEX 表名.索引名|視圖名.索引名[ ,...n ]
 
總結:

o(1)索引並非越多越好,一個表中如果有大量的索引,不僅占用大量的磁盤空間,而且會影響INSERT、DELETE、UPDATE等語句的性能。因為當表中數據更改的同時,索引也會進行調整和更新。
o(2)避免對經常更新的表進行過多的索引,並且索引中的列盡可能少。而對經常用於查詢的字段應該創建索引,但要避免添加不必要的字段。
o(3)數據量小的表最好不要使用索引,由於數據較少,查詢花費的時間可能比遍歷索引的時間還要短,索引可能不會產生優化效果。
o(4)在條件表達式中經常用到的、不同值較多的列上建立索引,在不同值少的列上不要建立索引。比如在學生表的“性別”字段上只有“男”與“女”兩個不同值,因此就無須建立索引。如果建立索引,不但不會提高查詢效率,反而會嚴重降低更新速度。
o(5)當唯一性是某種數據本身的特征時,指定唯一索引。使用唯一索引能夠確保定義的列的數據完整性,提高查詢速度。
o(6)在頻繁進行排序或分組(即進行GROUPBY或ORDERBY操作)的列上建立索引,如果待排序的列有多個,可以在這些列上建立組合索引。
 
http://bbs.51cto.com/viewthread.php?tid=1144146&extra=&page=2
http://blog.csdn.net/wltica/article/details/8537440

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM