SQLServer 语句-创建索引
語(yǔ)法:
CREATE [索引類型] INDEX 索引名稱
ON 表名(列名)
WITH FILLFACTOR = 填充因子值0~100
GO
/*實(shí)例*/USE 庫(kù)名
GO
IF EXISTS?(SELECT * FROM SYSINDEXES WHERE NAME='IX_TEST_TNAME')--檢測(cè)是否已經(jīng)存在IX_TEST_TNAME索引
DROP INDEX?TEST.IX_TEST_TNAME--如果存在則刪除
--創(chuàng)建索引
CREATE NONCLUSTERED INDEX?IX_TEST_TNAME?--創(chuàng)建一個(gè)非聚集索引
ON TEST(TNAME)??--為TEST表的TNAME字段創(chuàng)建索引
WITH FILLFACTOR = 30?--填充因子為30%
GO
SELECT * FROM TEST(INDEX = IX_TEST_TNAME) WHERE TNAME = 'A'?--指定按‘IX_TEST_TNAME’索引查詢
總結(jié):????? 1.什么是索引:數(shù)據(jù)庫(kù)中的索引是某個(gè)表中一列或多列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針清單。
??2.分類:
?????唯一索引(UNIQUE):不允許兩行具有相同的索引值(創(chuàng)建了唯一約束,系統(tǒng)將自動(dòng)創(chuàng)建唯一索引)
?????主鍵索引:主鍵索引要求主鍵中的每個(gè)值是唯一的,(創(chuàng)建主鍵自動(dòng)創(chuàng)建主鍵索引)
?????聚集索引(CLUSTERED):表中各行的物理順序與鍵值的邏輯(索引)順序相同,表中只能包含一個(gè)聚集索引,主鍵列默認(rèn)為聚集索引
?????非聚集索引(NONCLUSTERED):表中各行的物理順序與鍵值的邏輯(索引)順序不匹配,表中可以有249個(gè)非聚集索引
????3.創(chuàng)建索引的標(biāo)準(zhǔn):用語(yǔ)頻繁搜索的列;用語(yǔ)對(duì)數(shù)據(jù)進(jìn)行排序的列
注意:如果表中僅有幾行,或列中只包含幾個(gè)不同的值,不推薦創(chuàng)建索引,因?yàn)镾QL Server 在小型表中用索引搜索數(shù)據(jù)所花的時(shí)間比逐行搜索更長(zhǎng)。
?? http://msdn.microsoft.com/zh-cn/library/ms345331(SQL.90).aspx
新增:?2006 年 4 月 14 日
在指定的表上創(chuàng)建索引。可以在表中輸入數(shù)據(jù)之前創(chuàng)建索引。
?語(yǔ)法| ? |
| CREATE [UNIQUE] [NONCLUSTERED] INDEX index_name ON table_name (column_name [ASC|DESC][,…n]) WITH (STATISTICS_NORECOMPUTE = { ON | OFF })] |
| UNIQUE | 在表上創(chuàng)建唯一索引。唯一索引是不允許其中任意兩行具有相同索引值的索引。 SQL Server 2005 Compact Edition (SQL Server Compact Edition) 在創(chuàng)建索引后將檢查是否存在重復(fù)的值(如果數(shù)據(jù)已存在),并在每次使用 INSERT 或 UPDATE 語(yǔ)句添加數(shù)據(jù)時(shí)執(zhí)行該檢查操作。必須先消除重復(fù)值,然后才可對(duì)列創(chuàng)建唯一索引。如果存在重復(fù)的鍵值,則將取消 CREATE INDEX 語(yǔ)句并返回錯(cuò)誤。只能對(duì)定義為 NOT NULL 的列創(chuàng)建唯一索引。 如果存在唯一索引,則可能生成重復(fù)鍵值的 UPDATE 或 INSERT 語(yǔ)句將回滾,且 SQL Server Compact Edition 返回錯(cuò)誤。即使 UPDATE 或 INSERT 語(yǔ)句更改許多行,但只要存在一個(gè)重復(fù),上面這一點(diǎn)也將成立。 | |
| NONCLUSTERED | 創(chuàng)建指定表的邏輯排序的索引。使用非聚集索引,數(shù)據(jù)行的物理順序?qū)ⅹ?dú)立于其索引順序。這是唯一支持的索引類型。(默認(rèn)值為 NONCLUSTERED) | |
| index_name | 指定索引的名稱。索引名稱在表中必須是唯一的,但是在數(shù)據(jù)庫(kù)中不必是唯一的。 | |
| table_name | 指定要對(duì)其創(chuàng)建索引的表的名稱。 此表包含要建立索引的一個(gè)或多個(gè)列。 | |
| column name | 要應(yīng)用索引的列。指定兩個(gè)或兩個(gè)以上的列的名稱,以對(duì)指定列中的組合值創(chuàng)建組合索引。在表后面的括號(hào)中,按排序優(yōu)先級(jí)順序列出要包含在組合索引中的列。
| |
| ASC | DESC ] | 為特定的索引列確定升序 (ASC) 或降序 (DSC) 排序方向。默認(rèn)值為 ASC。 | |
| n | 指示可以為任何特定索引指定多列的占位符。索引中可以包含的最大列數(shù)為 16。 | |
| STATISTICS_NORECOMPUTE | 指定是否重新計(jì)算分發(fā)統(tǒng)計(jì)信息。默認(rèn)值為 OFF。
若要還原自動(dòng)統(tǒng)計(jì)信息更新,請(qǐng)將 STATISTICS_NORECOMPUTE 設(shè)置為 OFF,或執(zhí)行不帶 NORECOMPUTE 子句的 UPDATE STATISTICS。
|
示例
以下示例對(duì) MyCustomers 表創(chuàng)建了唯一索引:
| ?復(fù)制代碼 |
| CREATE TABLE MyCustomers (CustID int, CompanyName nvarchar(50)) CREATE UNIQUE INDEX idxCustId ON MyCustomers (CustId) |
總結(jié)
以上是生活随笔為你收集整理的SQLServer 语句-创建索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众汽车为什么烧机油?
- 下一篇: 微信公众平台开发之微信access_to