我们今天来说一下索引,前面已经说过一点索引了。今天在啰嗦一下了。
索引主要是在不读取全表的时候加速查询。索引就好比我们书的目录,它能帮助我们快速的找到要找的内容。SQL Server中主要分为两种:聚集索引和非聚集索引。聚集索引主要特点就是调整索引表顺序的同时也会调整原表的顺序。当创建主键时自动创建聚集索引。一个表只能有一个主键,同样一个表也只能有一个聚集索引。一个聚集索引表最多有16列。非聚集索引就是调整表索引表的同时不会改变原表的顺序。当创建唯一约束时自动创建非聚集索引。一个非聚集索引表最多有249列。这个聚集索引就好比我们新华字典的按拼音检索的那个目录,非聚集索引就好比那个按部首检索了。
唯一索引表示表中任何两个记录的索引值都不同的。
USE TestDB;--先建个表CREATE TABLE Book( bId int NOT NULL IDENTITY(0001,1), bName char(50), bPrice real, bPress char(100));--建立索引CREATE INDEX IN_book ON Book(bId ASC);--ASC是升序--DESC是降序--用两列建立索引CREATE INDEX IN_book1 ON Book(bId ASC,bPrice DESC);--建立聚集索引CREATE CLUSTERED INDEX IN_book2 ON Book(bId DESC);--建立非聚集索引CREATE NONCLUSTERED INDEX IN_book3 ON Book(bId DESC);--建立唯一索引CREATE UNIQUE INDEX IN_book4 ON Book(bID ASC);--大家看一下这个索引,能不能建立?CREATE INDEX IN_book ON Book(bId,bPrice DESC);--失败了吧,因为我们前面建过一个名为IN_book的索引了--如果我们想要建一个索引,如果存在就删除它,建立新的,该怎么办呢?CREATE INDEX IN_book ON Book(bId,bPrice DESC) WITH DROP_EXISTING; --修改索引--禁用IN_book索引ALTER INDEX IN_book ON Book DISABLE;--启用索引ALTER INDEX IN_book ON Book REBUILD;--删除索引DROP INDEX Book.IN_book2;