SQL Server 数据库之索引
MySQL 数据库的索引
- 1. 索引介绍
- 2. 索引的概述
- 2.1 索引
- 2.2 索引的特点
- 1. 使用索引能提升数据库的性能,主要体现在以下几个方面:
- 2. 在提升数据性能的同时,索引有一些负面影响
- 2.3 设计索引的注意事项
- 3. 索引的类型
- 3.1 聚集索引
- 3.2 非聚集索引
- 3.3 其他索引
- 4. 创建与删除索引
- 4.1 用 SQL 命令创建索引
- 4.2 用 SSMS 创建索引
- 4.3 用 SQL 命令删除索引
- 4.4 用 SSMS 删除索引
- 5. 修改和查看索引
- 5.1 用 SQL 命令修改索引
- 5.2 用 SSMS 重命名索引
- 5.3 用 SQL 命令查看索引
- 5.4 用 SSMS 查看索引
1. 索引介绍
视图 的存在简化了查询语句,为了 SQL Server 提升了工作效率;但当数据库中存储的数据量过于庞大时,这种程度的简化就显得微不足道了,而索引能解决这一问题的另一种数据库对象;
2. 索引的概述
2.1 索引
索引是一个单独的、存储在磁盘中的数据库结构,包含了所有记录的引用指针;索引就是一个目录;
如:我们想在一本很厚的书籍中找寻某些特定内容,最方便的查找方式就是先在目录中查找特定内容的所属页码,就能很快找到特定的内容了;
当数据库中存储的数据非常庞大时,可以把它看做一本书籍,而其中的某一条数据就是需要查找的某个知识点,这时候就能体现出索引的重要性;
2.2 索引的特点
1. 使用索引能提升数据库的性能,主要体现在以下几个方面:
- 极大地提升数据库的查询进度,这也是其最主要的优点;
- 通过创建唯一索引,能保证数据库中的各行数据具有唯一性;
- 建立在外码上的索引能加速表与表之间的连接,益于实现数据的参照完整性;
- 显著减少分组和排序查询所使用的时间;
2. 在提升数据性能的同时,索引有一些负面影响
- 索引会占用物理存储空间,需要一定的额外物理存储来存放索引文件;
- 索引的维护需要耗费时间,对数据表更新数据之后,相应的索引也需要动态维护;
2.3 设计索引的注意事项
索引设计不合理会对数据库及应用程序造成不良影响,所以设计索引时要注意以下几点:
- 索引并非越多越好,一个数据库中若含有许多索引,不仅占用磁盘空间,也会造成大量的维护开销;
- 对经常用于查询的列可建立索引的提高效率,但需要避免插入不必要的数据;
- 数据量较小的数据表最好不使用索引,因为可能不会产生明显的优化效果;
- 对于不同值较少的列,不要建立索引,这样会降低更新数据的速度;
3. 索引的类型
SQL Server 数据库的索引可分为聚集索引、非聚集索引与其他索引3类;
3.1 聚集索引
聚集索引确定了数据存储的顺序,数据表内的数据按照聚集索引兼职的顺序存储;由于物理存储顺序只有一个,即一个数据表值能包含一个聚集索引;
默认情况下,系统会对 PRIMARY KEY
约束自动创建聚集索引,这就是数据表中的数据行通常按照主码排列的原因;
3.2 非聚集索引
非聚集索引与聚集索引有类似的索引结构,不同的是,非聚集索引的索引排序与物理排序相互独立;即数据行的物理存储顺序和索引键的逻辑顺序不一致;
与聚集索引类似,非聚集索引能够有效提升数据的查询数据,同时也会降低更新数据的数据,并占用一定的存储空间;
当一个数据表需要频繁第更新数据或存储空间有限时,应限制非聚集索引的数量;
3.3 其他索引
SQL Server 数据库还提供了其他类型的索引,
- 唯一索引能够保证索引中不包含重复值,使数据表中的每一行在某种条件下具有唯一性;聚集索引和非聚集索引都能是唯一索引;
注意: 创建UNIQUE
约束时,将默认创建唯一非聚集索引,若该表不存在聚集索引,可指定唯一聚集索引; - 视图索引 即是在视图上建立的索引,它将视图具体化,并把结果集永久储存在聚集索引中,若在查询中频繁引用进行复杂处理的视图,可对其创建唯一聚集索引;
注意: 若经常更新视图索引中的数据表,维护视图索引的开销将远大于使用它的效率收益;
- 全文索引 是一种特殊类型的基于标记的索引,由 SQL Server 全文引擎生成及维护,用于快速查询某个字符出现的位置;
4. 创建与删除索引
4.1 用 SQL 命令创建索引
创建索引的 SQL 命令为 CREATE INDEX
,语法格式如下:
CREATE [UNIQUE][CLUSTERED|NONCLUSTERED] INDEX <索引名>
ON <表名或视图名> (<列名>[ASC|DESC] [, ...N])
[WITH <索引选项> [, ...N]]
命令说明:
[UNIQUE]
表示在数据表或视图上创建 唯一索引;CLUSTERED
表示在数据表或视图上创建聚集索引,NONCLUSTERED
表示创建 非聚集索引,省略时,表示创建 非聚集索引;<索引名>
表示该索引的名称,命名规则与数据表名类似;<表名或视图名>
指明索引所属的数据表或视图;<列名>
指定索引基于的列名,当指定两个或多个列名时,可创建组合索引;<索引选项>
能指定关于索引的其他属性设定;
例子 1:给数据表 B 在 ID 与 Name两列上建立名为 B_C 的唯一索引
create unique index B_C on B(ID,Name)
例子 1中的索引 B_C 存储了以属性 ID 与 Name 为基准的一种排列顺序,即先按 ID 递增排序,相同时再按 Name 递增排序;由于 UNIQUE
的限制,索引在(ID,Name)组合列上排序具有唯一性;
例子 2:给数据 O 在成绩列上建立名为 O_T 的非聚集索引
create nonclustered index O_T ON O(成绩)
4.2 用 SSMS 创建索引
打开 test 数据库 →点击 “db.C”数据表的 “+”号 → 右击 索引 → 新建索引 → 非聚集索引
输入 索引名称,点击添加 列,勾选 CN 和 Credit 列,点击 确定,确定;
4.3 用 SQL 命令删除索引
删除索引的 SQL 命令是 DROP INDEX
,语法格式如下:
DROP INDEX <数据表或视图.索引名>
或
DROP INDEX <索引名> ON <数据表或视图>
例子 3:删除所以 C_T
drop index C.C_T
4.4 用 SSMS 删除索引
选中要删除的索引,右击选择 删除;
5. 修改和查看索引
5.1 用 SQL 命令修改索引
- SQL 修改索引的命令为
ALTER INDEX
,语法格式如下:
ALTER INDEX <索引名>
ON <表名乎视图名> [修改选项]
- 用 SQL 命令修改索引的名称语法格式如下:
EXEC sp_rename <'表名或视图名.索引名'>,<'新索引名'>
例子 4:将数据表 C 的索引 C_Q 改名为 C_E
exec sp_rename 'C.C_Q','C_E'
注意: 修改索引名等修改操作会破坏脚本和储存过程,使用时若非必要,即先删除原索引,再重新新建索引,存储过程是一种编译对象,它是一组完成特定功能的 SQL 语句集;
5.2 用 SSMS 重命名索引
选择要修改的索引,右击重命名;
5.3 用 SQL 命令查看索引
sp_helpindex
存储过程可能返回数据表中所有索引信息,语法格式如下:
EXEC sp_helpindex <数据表名>
例子 5: 查看数据表 B 的索引
exec sp_helpindex B
查询结果如下:
5.4 用 SSMS 查看索引
选择要查查看的索引 双击或右击索引 → 属性 ;
SQL Server 数据库之索引相关推荐
- SQL Server数据库索引的基础知识
一.理解索引的结构 索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度.使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据.微软的SQL SERVER提供了两种索引:聚集索引 ...
- SQL Server 数据库备份
SQL Server 数据库备份 原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html 备份数据库是指对数据库或事务日志进行复制 ...
- SQL Server数据库六种数据移动方法
1. 通过工具DTS的设计器进行导入或导出DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然, ...
- python 使用pymssql连接sql server数据库
Python连接SQL Server数据库 - pymssql使用基础 ----原文地址:http://www.cnblogs.com/baiyangcao/p/pymssql_basic.html ...
- SQL SERVER全面优化-------索引有多重要?
想了好久索引的重要性应该怎么写?讲原理结构?我估计大部分人不愿意看,也不愿意花那么多时间仔细研究.光写应用?感觉不明白原理一样不会用.举例说明?情况太多也写不全....到底该怎么写呢? 随便写吧,想到 ...
- 在ASP.NET中将图片存储到Sql Server数据库中
在ASP.NET中将图片存储到Sql Server数据库中 http://hi.baidu.com/rayshow/blog/item/360e8ff9662c8b5a252df268.html 索引 ...
- 人人都是 DBA(V)SQL Server 数据库文件
SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name],database_id,suser_sname(o ...
- SQL Server 数据库的整理优化的基本过程(二)
SQL Server 数据库的整理优化的基本过程(二) 高建刚 第一节 基本维护 第二节 索引 索引相信大家都不陌生,而且在因特网上,有了很多关于如何通过索引来优化数据库的文章,在这里,我主要是结合我 ...
- 优化SQL Server数据库查询方法
本文详细介绍了优化SQL Server数据库查询方法. SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) ...
- 我的SQL SERVER数据库会装满吗?
原文:我的SQL SERVER数据库会装满吗? 概述 今天有个客户问我一个蛮有意思的问题.我使用的SQL SERVER 2008数据库,目前数据库130多G,其中某个表的记录条数就有3亿1千多万,占用 ...
最新文章
- 解决训练不稳定性,何恺明团队新作来了!自监督学习+Transformer=MoCoV3
- [Contest20171109]函数(lipshitz)
- python 操作word文件案例
- 如何快速在CentOS搭建光盘【永久搭载光盘】
- SAP UI5 why failed to load 'sap/cus/crm/lib/reuse/library.js' from resources/sap/cus/crm
- SimpleDateFormat使用详解——日期、字符串应用
- 突然!华为P30 Pro真机上手视频曝光:屏幕指纹解锁秒开
- linux trac svn,Ubuntu安装Trac SVN的方法及命令
- 当动物保护用上AI……
- Android13_fragment_view动画_属性动画
- Apple 官方文档翻译:NSURLSession
- python 百度文库_百度文库文档下载地址解析python版【摸索不易,还请支持】
- 华为路由与交换 eSight基本概述学习笔记
- JDK动态代理原理解析
- 保险渠道的两极之路——保险新渠道(一)
- 【Matlab】数学建模_变异系数法
- SAP MM 供应商无英文名称,ME21N里却带出了英文名字?
- CAP MAP VLR HLR GMSC DP gsmSSF简介
- CDH集成了Kerberos后写入数据到HBase遇到的几个问题
- XMOS笔记1--LED的控制