SQL Server 数据库之索引

MySQL 数据库的索引

1. 索引介绍

视图 的存在简化了查询语句,为了 SQL Server 提升了工作效率;但当数据库中存储的数据量过于庞大时,这种程度的简化就显得微不足道了,而索引能解决这一问题的另一种数据库对象;

2. 索引的概述

2.1 索引

索引是一个单独的、存储在磁盘中的数据库结构,包含了所有记录的引用指针;索引就是一个目录
如:我们想在一本很厚的书籍中找寻某些特定内容,最方便的查找方式就是先在目录中查找特定内容的所属页码,就能很快找到特定的内容了;
当数据库中存储的数据非常庞大时,可以把它看做一本书籍,而其中的某一条数据就是需要查找的某个知识点,这时候就能体现出索引的重要性;

2.2 索引的特点

1. 使用索引能提升数据库的性能,主要体现在以下几个方面:

  1. 极大地提升数据库的查询进度,这也是其最主要的优点;
  2. 通过创建唯一索引,能保证数据库中的各行数据具有唯一性;
  3. 建立在外码上的索引能加速表与表之间的连接,益于实现数据的参照完整性;
  4. 显著减少分组和排序查询所使用的时间;

2. 在提升数据性能的同时,索引有一些负面影响

  1. 索引会占用物理存储空间,需要一定的额外物理存储来存放索引文件;
  2. 索引的维护需要耗费时间,对数据表更新数据之后,相应的索引也需要动态维护;

2.3 设计索引的注意事项

索引设计不合理会对数据库及应用程序造成不良影响,所以设计索引时要注意以下几点:

  1. 索引并非越多越好,一个数据库中若含有许多索引,不仅占用磁盘空间,也会造成大量的维护开销;
  2. 对经常用于查询的列可建立索引的提高效率,但需要避免插入不必要的数据;
  3. 数据量较小的数据表最好不使用索引,因为可能不会产生明显的优化效果;
  4. 对于不同值较少的列,不要建立索引,这样会降低更新数据的速度;

3. 索引的类型

SQL Server 数据库的索引可分为聚集索引非聚集索引其他索引3类;

3.1 聚集索引

聚集索引确定了数据存储的顺序,数据表内的数据按照聚集索引兼职的顺序存储;由于物理存储顺序只有一个,即一个数据表值能包含一个聚集索引;
默认情况下,系统会对 PRIMARY KEY约束自动创建聚集索引,这就是数据表中的数据行通常按照主码排列的原因;

3.2 非聚集索引

非聚集索引与聚集索引有类似的索引结构,不同的是,非聚集索引的索引排序与物理排序相互独立;即数据行的物理存储顺序和索引键的逻辑顺序不一致;
与聚集索引类似,非聚集索引能够有效提升数据的查询数据,同时也会降低更新数据的数据,并占用一定的存储空间;
当一个数据表需要频繁第更新数据或存储空间有限时,应限制非聚集索引的数量;

3.3 其他索引

SQL Server 数据库还提供了其他类型的索引,

  1. 唯一索引能够保证索引中不包含重复值,使数据表中的每一行在某种条件下具有唯一性;聚集索引和非聚集索引都能是唯一索引
    注意: 创建 UNIQUE约束时,将默认创建唯一非聚集索引,若该表不存在聚集索引,可指定唯一聚集索引;
  2. 视图索引 即是在视图上建立的索引,它将视图具体化,并把结果集永久储存在聚集索引中,若在查询中频繁引用进行复杂处理的视图,可对其创建唯一聚集索引

注意: 若经常更新视图索引中的数据表,维护视图索引的开销将远大于使用它的效率收益;

  1. 全文索引 是一种特殊类型的基于标记的索引,由 SQL Server 全文引擎生成及维护,用于快速查询某个字符出现的位置;

4. 创建与删除索引

4.1 用 SQL 命令创建索引

创建索引的 SQL 命令为 CREATE INDEX,语法格式如下:

CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX <索引名>
ON <表名或视图名> (<列名>[ASC|DESC] [, ...N])
[WITH <索引选项> [, ...N]]

命令说明:

  1. [UNIQUE] 表示在数据表或视图上创建 唯一索引
  2. CLUSTERED 表示在数据表或视图上创建聚集索引NONCLUSTERED 表示创建 非聚集索引,省略时,表示创建 非聚集索引
  3. <索引名> 表示该索引的名称,命名规则与数据表名类似;
  4. <表名或视图名> 指明索引所属的数据表或视图;
  5. <列名> 指定索引基于的列名,当指定两个或多个列名时,可创建组合索引
  6. <索引选项> 能指定关于索引的其他属性设定;

例子 1:给数据表 B 在 ID 与 Name两列上建立名为 B_C 的唯一索引

create unique index B_C on B(ID,Name)

《SQL Server 数据库之索引》
例子 1中的索引 B_C 存储了以属性 ID 与 Name 为基准的一种排列顺序,即先按 ID 递增排序,相同时再按 Name 递增排序;由于 UNIQUE 的限制,索引在(ID,Name)组合列上排序具有唯一性;
例子 2:给数据 O 在成绩列上建立名为 O_T 的非聚集索引

create nonclustered index O_T ON O(成绩)

《SQL Server 数据库之索引》

4.2 用 SSMS 创建索引

打开 test 数据库 →点击 “db.C”数据表的 “+”号 → 右击 索引新建索引非聚集索引
《SQL Server 数据库之索引》
输入 索引名称,点击添加 列,勾选 CN 和 Credit 列,点击 确定确定
《SQL Server 数据库之索引》

4.3 用 SQL 命令删除索引

删除索引的 SQL 命令是 DROP INDEX,语法格式如下:

DROP INDEX <数据表或视图.索引名>DROP INDEX <索引名> ON <数据表或视图>

例子 3:删除所以 C_T

drop index C.C_T

4.4 用 SSMS 删除索引

选中要删除的索引,右击选择 删除
《SQL Server 数据库之索引》

5. 修改和查看索引

5.1 用 SQL 命令修改索引

  1. SQL 修改索引的命令为 ALTER INDEX,语法格式如下:
ALTER INDEX <索引名>
ON <表名乎视图名> [修改选项]
  1. 用 SQL 命令修改索引的名称语法格式如下:
EXEC sp_rename <'表名或视图名.索引名'>,<'新索引名'>

例子 4:将数据表 C 的索引 C_Q 改名为 C_E

exec sp_rename 'C.C_Q','C_E'

注意: 修改索引名等修改操作会破坏脚本和储存过程,使用时若非必要,即先删除原索引,再重新新建索引,存储过程是一种编译对象,它是一组完成特定功能的 SQL 语句集;

5.2 用 SSMS 重命名索引

选择要修改的索引,右击重命名
《SQL Server 数据库之索引》

5.3 用 SQL 命令查看索引

sp_helpindex 存储过程可能返回数据表中所有索引信息,语法格式如下:

EXEC sp_helpindex <数据表名>

例子 5: 查看数据表 B 的索引

exec sp_helpindex B

查询结果如下:
《SQL Server 数据库之索引》

5.4 用 SSMS 查看索引

选择要查查看的索引 双击或右击索引 → 属性
《SQL Server 数据库之索引》
《SQL Server 数据库之索引》

    原文作者:菇毒
    原文地址: https://blog.csdn.net/weixin_43960383/article/details/123617732
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞