1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > SQL中的索引知识点总结(聚集索引 非聚集索引)

SQL中的索引知识点总结(聚集索引 非聚集索引)

时间:2018-12-16 12:29:23

相关推荐

SQL中的索引知识点总结(聚集索引 非聚集索引)

SQL里的索引(index)知识:

索引分为聚集索引非聚集索引,数据库中的索引类似于一本书的目录,在一本书中通过目录可以快速找到你想要的信息(例如字典里按照拼音或部首查找)。索引的目的是提高系统性能,加快数据的查询速度与减少系统的响应时间 。索引建少了,用where子句找到数据效率低,不利于查找数据。索引建多了,不利于新增、修改和删除等相关操作。因为做这些操作时,除了要更新数据表本身,还要连带立即更新所有的相关索引,而且过多的索引也会浪费硬盘空间。

索引的分类:

唯一索引(UNIQUE):每一行的索引值都是唯一的(创建了唯一约束,系统将自动创建唯一索引)主键索引:当创建表时指定的主键列,会自动创建主键索引,并且拥有唯一的特性。聚集索引(CLUSTERED):聚集索引就相当于使用字典的拼音查找,因为聚集索引存储记录在物理上是连续存在的,即拼音a过了就是b一样。非聚集索引(NONCLUSTERED):非聚集索引就相当于使用字典的部首查找,非聚集索引是逻辑上的连续,物理存储并不连续。

PS:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

什么情况下使用索引

语法

//在创建表的同时创建索引CREATE TABLE 表名(字段名 数据类型 [完整性约束条件],[UNIQUE | FULLTEXT | SPATIAL] [ CLUSTERED | NONCLUSTERED ] INDEX | KEY[索引名] (字段名1 [(长度)] [ASC | DESC]));//在定义好表后创建索引CREATE [ UNIQUE | FULLTEXT | SPATIAL] [ CLUSTERED | NONCLUSTERED ] INDEX|KEY index_name ON table_name( column_name [ ASC | DESC ])

参数:

UNIQUE:可选,为表或视图创建唯一索引。 唯一索引不允许两行具有相同的索引键值。 视图的聚集索引必须唯一。如果要建唯一索引的列有重复值,必须先删除重复值。

CLUSTERED:可选,表示指定创建的索引为聚集索引。创建索引时,键值的逻辑顺序决定表中对应行的物理顺序。 聚集索引的底层(或称叶级别)包含该表的实际数据行。

NONCLUSTERED:可选,表示指定创建的索引为非聚集索引。创建一个指定表的逻辑排序的索引。 对于非聚集索引,数据行的物理排序独立于索引排序。

index_name:表示指定所创建的索引的名称。

table——name:表示指定创建索引的表的名称。

view:表示指定创建索引的视图的名称。

column_name:索引所基于的一列或多列。 指定两个或多个列名,可为指定列的组合值创建组合索引。

[ ASC | DESC]:表示指定特定索引列的升序或降序排序方向。 默认值为 ASC。

创建唯一聚集索引:

create unique clustered --表示创建唯一聚集索引index UQ_Clu_StuNo --索引名称on Student(S_StuNo) --数据表名称(建立索引的列名)

创建非聚集索引:

create nonclustered index NonClu_Indexon Student(S_StuNo)with (drop_existing=on)

创建唯一索引:

create unique index NonClu_Indexon Student(S_StuNo)with (drop_existing=on)

PS:当create index时,如果未指定clustered和nonclustered,那么默认为nonclustered

创建组合索引:

--eg1:CREATE TABLE index5(id INT,name VARCHAR(20),sex CHAR(4),INDEX index5_ns(name,sex));--eg2:创建非聚集复合索引,未指定默认为非聚集索引create index Index_StuNo_SNameon Student(S_StuNo,S_Name)

修改索引

--修改索引语法ALTER INDEX {索引名| ALL }ON <表名|视图名>{REBUILD | DISABLE | REORGANIZE }[ ; ]

REBUILD:表示指定重新生成索引。

DISABLE:表示指定将索引标记为已禁用。

REORGANIZE:表示指定将重新组织的索引叶级。

--禁用名为 NonClu_Index 的索引alter index NonClu_Index on Student disable

删除和查看索引

--查看指定表 Student 中的索引exec sp_helpindex Student --删除指定表 Student 中名为 Index_StuNo_SName 的索引drop index Student.Index_StuNo_SName--检查表 Student 中索引 UQ_S_StuNo 的碎片信息dbcc showcontig(Student,UQ_S_StuNo)--整理 Test 数据库中表 Student 的索引 UQ_S_StuNo 的碎片dbcc indexdefrag(Test,Student,UQ_S_StuNo)--更新表 Student 中的全部索引的统计信息update statistics Student

无法对表创建多个聚集索引。请在创建新聚集索引前删除现有的聚集索引问题:

主键是表中一个字段或多个字段,用来唯一地标识表中的一条记录。唯一性是主键最主要的特性。建立主键的时候可以声明为CLUSTERED(聚集)或NONCLUSTERED(非聚集)。也就是说主键可以声明为非聚集索引。

CREATE TABLE student(stud_id INT IDENTITY(1,1) NOT NULL,stud_name NVARCHAR(20) NOT NULL,CONSTRAINT pk_student PRIMARY KEY NONCLUSTERED (stud_id));

在SQLServer中,主键的创建必须依赖于索引,默认创建的是聚集索引。跟着主键而创建的索引不可以被单独删除。

--执行删除索引语句,SQLServer将会报错。DROP INDEX pk_student ON student

参考文章:

/Brambling/p/6754993.html

/Just_do_it_HZF/article/details/70310447?utm_source=blogxgwz6

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。