索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。

唯一索引

唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。

主键索引

数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

聚集索引

在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引和非聚集索引的区别,如字典默认按字母顺序排序,读者如知道某个字的读音可根据字母顺序快速定位。因此聚集索引和表的内容是在一起的。如读者需查询某个生僻字,则需按字典前面的索引,举例按偏旁进行定位,找到该字对应的页数,再打开对应页数找到该字。这种通过两个地方而查询到某个字的方式就如非聚集索引。

索引列

可以基于数据库表中的单列或多列创建索引。多列索引可以区分其中一列可能有相同值的行。如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。

优点

通过建立索引可以极大地提高在数据库中获取所需信息的速度,同时还能提高服务器处理相关搜索请求的效率,从这个方面来看它具有以下优点:

  • 在设计数据库时,通过创建一个惟一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的惟一性特点。
  • 能提高数据的搜索及检索速度,符合数据库建立的初衷。
  • 能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用。
  • 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。
  • 建立索引之后,在信息查询过程中可以使用优化隐藏器,这对于提高整个信息检索系统的性能具有重要意义。

缺点

虽然索引的建立在提高检索效率方面具有诸多积极的作用,但还是存在下列缺点 :

  • 在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。
  • 在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间,如果有必要建立起聚簇索引,所占用的空间还将进一步的增加
  • 在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。

例子

 SELECT * FROM mytable WHERE category_id=1;

最直接的应对之道,是为category_id建立一个简单的索引:

CREATE INDEX mytable_categoryid ON mytable (category_id);
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;

第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。可以建立多重的索引。

CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

数据库索引——唯一索引、主键索引、聚集索引相关推荐

  1. 主键、聚集索引、非聚集索引区别

    下面是一个简单的比较表   主键 聚集索引 用途 强制表的实体完整性 对数据行的排序,方便查询用 一个表多少个 一个表最多一个主键 一个表最多一个聚集索引 是否允许多个字段来定义 一个主键可以多个字段 ...

  2. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引

    我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...

  3. 主键与聚集索引的区别

    主键可为聚集索引也可为非聚集索引. 两者的比较 下面是一个简单的比较表   主键 聚集索引 用途 强制表的实体完整性 对数据行的排序,方便查询用 一个表多少个 一个表最多一个主键 一个表最多一个聚集索 ...

  4. mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别

    一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...

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

     前言 最近在一次面试中,讨论了一个这样的问题:主键和索引有什么区别?当时我的回答是这样的:"主键就是加了唯一性约束的聚集索引." "你确定你所说的是对的?" ...

  6. 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...

    强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...

  7. 数据库键(key)、主键(primaryKey)、索引(index)、唯一索引(uniqueIndex)区别

    1.键:key,数据库的物理结构,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的).包括:primary key, unique key, foreign key(主键/唯一键 ...

  8. mysql中主键、普通索引、唯一索引和全文索引

    SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...

  9. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  10. 数据库索引相关(主键索引和非主键索引区别)

    索引基础 关于索引的知识可以看:SQL索引(INDEX). 简单概括就是:为数据库某些字段增加索引是可以加快查询速度的,并且一个表是可以创建多个索引的,而一个索引可以包含多个字段. 如果不使用索引,则 ...

最新文章

  1. R对数秩检验(log rank test)
  2. 用上 RocketMQ,系统性能提升了 10 倍!
  3. Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
  4. cloud 部署_使用Google Cloud AI平台开发,训练和部署TensorFlow模型
  5. 使用 Tye 辅助开发 k8s 应用竟如此简单(六)
  6. notepad怎么设置python为环境变量_在Notepad++里配置python环境
  7. 图谱特征与卷积神经网络的名优大米无损鉴别
  8. VLAN间路由:每个VLAN一个物理连接,单臂路由,三层交换
  9. 从 Google play 商店直接下载 apk 安装包
  10. Steam Roller UVALive - 4128
  11. 数据库 无损分解和保持依赖的判断
  12. 大学学python要买电脑吗_大学生需要买电脑吗?
  13. 618省心凑背后的新算法——个性化凑单商品打包购推荐
  14. Spring关于AOP配置举例(注解方式)
  15. 华硕FX63VM笔记本bios如何设置U盘启动
  16. 从零学前端第一讲:前端开发是什么?给初学者有什么建议?
  17. ES6 Proxy 和 Reflect 的理解
  18. 迅搜 php,安装、升级 - 权威指南 - 迅搜(xunsearch) - 开源免费中文全文搜索引擎
  19. Taulia的Darcy Douglas入选供应链最优秀女性
  20. Apple macOS 下载汇总(系统、应用和技巧)macOS Monterey

热门文章

  1. IOT语义互操作性之标准与开源
  2. 溴原子Br/季铵盐修饰氮杂Aza-BODIPY 染料介绍及应用
  3. GSMA公布2018世界移动大会-上海的最新进展
  4. 商代王后妇好、玉器及特展相关资料整理
  5. Python输出三角形图案
  6. ASP.NET程序设计教程(C#版)——学习心得
  7. VMWare网络模式(Centos7)
  8. 搜狗AI事业部张博:不只翻译机,半年内将推数款智能硬件产品
  9. python 从文件中读取数据,同时去除掉空格和换行
  10. TextView.setText()为什么会出错