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. 使用索引能提升数据库的性能,主要体现在以下几个方面:

  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)


例子 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 命令修改索引

  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 重命名索引

选择要修改的索引,右击重命名

5.3 用 SQL 命令查看索引

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

EXEC sp_helpindex <数据表名>

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

exec sp_helpindex B

查询结果如下:

5.4 用 SSMS 查看索引

选择要查查看的索引 双击或右击索引 → 属性

SQL Server 数据库之索引相关推荐

  1. SQL Server数据库索引的基础知识

    一.理解索引的结构 索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度.使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据.微软的SQL SERVER提供了两种索引:聚集索引 ...

  2. SQL Server 数据库备份

    SQL Server 数据库备份 原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html 备份数据库是指对数据库或事务日志进行复制 ...

  3. SQL Server数据库六种数据移动方法

    1. 通过工具DTS的设计器进行导入或导出DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然, ...

  4. python 使用pymssql连接sql server数据库

    Python连接SQL Server数据库 - pymssql使用基础 ----原文地址:http://www.cnblogs.com/baiyangcao/p/pymssql_basic.html ...

  5. SQL SERVER全面优化-------索引有多重要?

    想了好久索引的重要性应该怎么写?讲原理结构?我估计大部分人不愿意看,也不愿意花那么多时间仔细研究.光写应用?感觉不明白原理一样不会用.举例说明?情况太多也写不全....到底该怎么写呢? 随便写吧,想到 ...

  6. 在ASP.NET中将图片存储到Sql Server数据库中

    在ASP.NET中将图片存储到Sql Server数据库中 http://hi.baidu.com/rayshow/blog/item/360e8ff9662c8b5a252df268.html 索引 ...

  7. 人人都是 DBA(V)SQL Server 数据库文件

    SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name],database_id,suser_sname(o ...

  8. SQL Server 数据库的整理优化的基本过程(二)

    SQL Server 数据库的整理优化的基本过程(二) 高建刚 第一节 基本维护 第二节 索引 索引相信大家都不陌生,而且在因特网上,有了很多关于如何通过索引来优化数据库的文章,在这里,我主要是结合我 ...

  9. 优化SQL Server数据库查询方法

    本文详细介绍了优化SQL Server数据库查询方法. SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) ...

  10. 我的SQL SERVER数据库会装满吗?

    原文:我的SQL SERVER数据库会装满吗? 概述 今天有个客户问我一个蛮有意思的问题.我使用的SQL SERVER 2008数据库,目前数据库130多G,其中某个表的记录条数就有3亿1千多万,占用 ...

最新文章

  1. 解决训练不稳定性,何恺明团队新作来了!自监督学习+Transformer=MoCoV3
  2. [Contest20171109]函数(lipshitz)
  3. python 操作word文件案例
  4. 如何快速在CentOS搭建光盘【永久搭载光盘】
  5. SAP UI5 why failed to load 'sap/cus/crm/lib/reuse/library.js' from resources/sap/cus/crm
  6. SimpleDateFormat使用详解——日期、字符串应用
  7. 突然!华为P30 Pro真机上手视频曝光:屏幕指纹解锁秒开
  8. linux trac svn,Ubuntu安装Trac SVN的方法及命令
  9. 当动物保护用上AI……
  10. Android13_fragment_view动画_属性动画
  11. Apple 官方文档翻译:NSURLSession
  12. python 百度文库_百度文库文档下载地址解析python版【摸索不易,还请支持】
  13. 华为路由与交换 eSight基本概述学习笔记
  14. JDK动态代理原理解析
  15. 保险渠道的两极之路——保险新渠道(一)
  16. 【Matlab】数学建模_变异系数法
  17. SAP MM 供应商无英文名称,ME21N里却带出了英文名字?
  18. CAP MAP VLR HLR GMSC DP gsmSSF简介
  19. CDH集成了Kerberos后写入数据到HBase遇到的几个问题
  20. XMOS笔记1--LED的控制

热门文章

  1. 饿了么UI 时间控件 el-date-picker时间范围限制
  2. linux刷wes7,WES7——Win7的嵌入式操作系统
  3. Tableau商业智能与可视化应用实战系列视频教程(史上最全)
  4. 清华大学中文语音识别数据 THCHS30
  5. 算法小结——KM算法
  6. linux ubuntu用哪个版本,Ubuntu到底哪个版本最好用?
  7. cass软件yy命令_南方CASS软件快捷命令大全,高手必备。。。
  8. 【生信技能树】GEO数据库挖掘 P5
  9. 中职计算机基础知识总结,中职计算机基础知识整理
  10. java小写金额转大写工具类