SQLServer学习笔记十一:索引

本文详细介绍了数据库索引的概念,包括聚集索引和非聚集索引的区别,并提供了创建和删除索引的T-SQL语法示例。此外,还讨论了索引设计的基本原则,如考虑更新频率、查询性能和索引数量的平衡,以及如何根据查询需求优化索引策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标

  • 理解索引的概念
  • 创建索引
  • 删除索引
  • 索引设计的基本原则

索引的概念

SQL Server的索引是对数据库中一个或多个列的值进行排序的结构,可以加快数据的查询速度,减少系统的响应时间。

索引分类

按照索引组织方式的不同,可以将索引分为聚集索引和非聚集索引。

聚集索引

聚集索引确定表中数据的物理顺序,当以某字段作为关键字建立聚集索引时,表中数据以该字段作为排序依据。即索引的顺序决定了表中行的存储顺序。因此,每个表只能有一个聚集索引。

例如,可以将图书馆中的书按照书名进行排序,建立一个字母开头的目录,a开头的书放在书架的第一排,b开头的书放在第二排,这就是一个聚集索引。

非聚集索引

非聚集索引并不在屋里上排列数据,即索引中的逻辑顺序并不等同于表中行的屋里顺序,索引仅仅记录指向表中行的位置的指针(位置信息),这些 指针本身是有序的,通过这些指针可以在表中快速地定位数据。

例如,还是图书馆的例子,如果希望按作者去查找的话,那么需要再编写一个目录,记录某某作者的书分别在第几排,这就是一个非聚集索引。

聚集索引和非聚集索引的区别
聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。

创建索引

在T-SQL中可以使用CREATE INDEX创建索引,语法如下:

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX 索引名称
ON 表名或视图名(1, [2,...])  

其中个参数的含义如下:

  • UNIQUE,为表或视图创建唯一索引
  • CLUSTERED,表示创建聚集索引,决定了表中对应行的物理顺序
  • NONCLUSTERED,创建非聚集索引

练习1

对students表的sno创建聚集索引

CREATE  UNIQUE CLUSTERED INDEX IX_students_sno ON students (sno)

练习2

对students表的sname创建非聚集索引

CREATE INDEX IX_students_sname ON students (sname)

删除索引

在T-SQL中可以使用DROP INDEX创建索引,语法如下:

DROP INDEX 表名或视图名.索引名称

练习

删除students表的索引IX_students_sname

DROP INDEX students.IX_students_sname 

索引设计原则

在使用索引前,应知道以下问题:

  • 一个表如果建有大量索引,会影响INSERT、UPDATE和DELETE语句的性能,因此应避免对经常更新的表进行过多的索引
  • 使用多个索引可以提高更新少而数据量大的查询性能

因此在设计索引时,应该遵循下面的原则

  • 定义主键的数据列一定要建立索引
  • 定义有外键的数据列一定要建立索引
  • 对于经常查询的数据列最好建立索引
  • 对于需要在指定范围内的快速或频繁查询的数据列
  • 经常用在WHERE子句中的数据列
  • 经常出现在关键字order by、group by、distinct后面的字段。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用
  • 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引
  • 对于定义为text、image和bit的数据类型的列不要建立索引
  • 对于经常存取的列避免建立索引
  • 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。
  • 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。

总结

  • 理解索引的概念
  • 创建索引
  • 删除索引
  • 索引设计的基本原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值