1. 程式人生 > >SQLServer 語句-建立索引

SQLServer 語句-建立索引

語法:
CREATE [索引型別] INDEX 索引名稱
ON 表名(列名)
WITH FILLFACTOR = 填充因子值0~100
GO

/*例項*/
USE 庫名
GO
IF EXISTS
(SELECT * FROM SYSINDEXES WHERE NAME='IX_TEST_TNAME')--檢測是否已經存在IX_TEST_TNAME索引
DROP INDEX TEST.IX_TEST_TNAME--如果存在則刪除

--建立索引
CREATE NONCLUSTERED INDEX IX_TEST_TNAME --建立一個非聚集索引
ON TEST(TNAME)  --為TEST表的TNAME欄位建立索引
WITH FILLFACTOR = 30 --填充因子為30%


GO

SELECT * FROM TEST(INDEX = IX_TEST_TNAME) WHERE TNAME = 'A' --指定按‘IX_TEST_TNAME’索引查詢

總結:
      1.什麼是索引:
資料庫中的索引是某個表中一列或多列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。
  2.分類:
     唯一索引(UNIQUE):不允許兩行具有相同的索引值(建立了唯一約束,系統將自動建立唯一索引)
     主鍵索引主鍵索引要求主鍵中的每個值是唯一的,(建立主鍵自動建立主鍵索引)
     聚集索引(CLUSTERED):表中各行的物理順序與鍵值的邏輯(索引)順序相同,表中只能包含一個聚集索引,主鍵列預設為聚集索引
     非聚集索引(NONCLUSTERED):

表中各行的物理順序與鍵值的邏輯(索引)順序不匹配,表中可以有249個非聚集索引
    3.建立索引的標準:用語頻繁搜尋的列;用語對資料進行排序的列
注意:如果表中僅有幾行,或列中只包含幾個不同的值,不推薦建立索引,因為SQL Server 在小型表中用索引搜尋資料所花的時間比逐行搜尋更長。

CREATE INDEX (SQL Server Compact Edition)
   http://msdn.microsoft.com/zh-cn/library/ms345331(SQL.90).aspx

新增: 2006 年 4 月 14 日

在指定的表上建立索引。可以在表中輸入資料之前建立索引。

語法
CREATE [UNIQUE] [NONCLUSTERED] INDEX index_name ON table_name (column_name [ASC|DESC][,…n])
WITH (STATISTICS_NORECOMPUTE = { ON | OFF })]
引數
術語定義

UNIQUE

在表上建立唯一索引。唯一索引是不允許其中任意兩行具有相同索引值的索引。

SQL Server 2005 Compact Edition (SQL Server Compact Edition) 在建立索引後將檢查是否存在重複的值(如果資料已存在),並在每次使用 INSERT 或 UPDATE 語句新增資料時執行該檢查操作。必須先消除重複值,然後才可對列建立唯一索引。如果存在重複的鍵值,則將取消 CREATE INDEX 語句並返回錯誤。只能對定義為 NOT NULL 的列建立唯一索引。

如果存在唯一索引,則可能生成重複鍵值的 UPDATE 或 INSERT 語句將回滾,且 SQL Server Compact Edition 返回錯誤。即使 UPDATE 或 INSERT 語句更改許多行,但只要存在一個重複,上面這一點也將成立。

NONCLUSTERED

建立指定表的邏輯排序的索引。使用非聚集索引,資料行的物理順序將獨立於其索引順序。這是唯一支援的索引型別。(預設值為 NONCLUSTERED)

index_name

指定索引的名稱。索引名稱在表中必須是唯一的,但是在資料庫中不必是唯一的。

table_name

指定要對其建立索引的表的名稱。

此表包含要建立索引的一個或多個列。

column name

要應用索引的列。指定兩個或兩個以上的列的名稱,以對指定列中的組合值建立組合索引。在表後面的括號中,按排序優先順序順序列出要包含在組合索引中的列。

注意:
不能將包含 ntext 或 image 資料型別的列指定為要建立索引的列。

ASC | DESC ]

為特定的索引列確定升序 (ASC) 或降序 (DSC) 排序方向。預設值為 ASC。

n

指示可以為任何特定索引指定多列的佔位符。索引中可以包含的最大列數為 16。

STATISTICS_NORECOMPUTE

指定是否重新計算分發統計資訊。預設值為 OFF。

  • ON
    不自動重新計算過期的統計資訊。
  • OFF
    啟用自動統計資訊更新

若要還原自動統計資訊更新,請將 STATISTICS_NORECOMPUTE 設定為 OFF,或執行不帶 NORECOMPUTE 子句的 UPDATE STATISTICS。

重要事項:
禁用分發統計資訊的自動重新計算功能可能會阻止查詢優化器為涉及此表的查詢選取最佳執行計劃。

示例

以下示例對 MyCustomers 表建立了唯一索引:

複製程式碼
CREATE TABLE MyCustomers (CustID int, CompanyName nvarchar(50))
CREATE UNIQUE INDEX idxCustId ON MyCustomers (CustId)