快速理解聚集索引和非聚集索引

原创 2016年01月27日 14:53:02


       数据库的索引,听起来挺神秘的,仔细想想。这些索引,其实就是平时咱们查东西时候常用的两种手段。无非就是为了提高我们找东西的效率而已。那么我们平时又是怎么查东西呢?

聚集索引:


       聚集索引,来源于生活尝试。这中索引可以说是按照数据的物理存储进行划分的。对于一堆记录来说,使用聚集索引就是对这堆记录 进行 堆划分。即主要描述的是物理上的存储。

举个例子:


       比如图书馆新进了一批书。那么这些书需要放到图书馆内。书如何放呢?一般都有一个规则,杂志类的放到101房间,文学类的放到102房间,理工类的放到103房间等等。这些存储的规则决定了每本书应该放到哪里。而这个例子中聚集索引为书的类别。
       正式因为这种存储规则,才导致 聚集索引的唯一性。

误区:


       有的人认为,聚集索引的字段是唯一的。这是因为sql server 中添加主键的时候,自动给主键所在的字段生成一个聚集索引。所以人们会认为聚集索引所加的字段是唯一的。
       思考一下上面这个问题。杂志类的书放到101房间。那么如果杂志类的书太多,一个101房间存放不下。那么可能101,201两个房间来存放杂志类的书籍。如果这样分析的话,那么一个杂志类对应多个房间。放到表存储的话,那么这个类别字段 就不是唯一的了。

非聚集索引:


       非聚集索引,也可以从生活中找到映射。非聚集索引强调的是逻辑分类。可以说是定义了一套存储规则,而需要有一块控件来维护这个规则,这个被称之为索引表。

继续使用上述提到的例子:


       同学如果想去图书馆找一本书,而不知道这本书在哪里?那么这个同学首先应该找的就是 检索室吧。对于要查找一本书来说,在检索室查是一个非常快捷的的途径了吧。但是,在检索室中你查到了该书在XX室XX书架的信息。你的查询结束了吗?没有吧。你仅仅找到了目的书的位置信息,你还要去该位置去取书。


对于这种方式来说,你需要两个步骤:
       1、查询该记录所在的位置。
       2、通过该位置去取要找的记录。

区别:


       聚集索引:可以帮助把很大的范围,迅速减小范围。但是查找该记录,就要从这个小范围中Scan了。
       非聚集索引:把一个很大的范围,转换成一个小的地图。你需要在这个小地图中找你要寻找的信息的位置。然后通过这个位置,再去找你所需要的记录。

索引与主键的区别


       主键:主键是唯一的,用于快速定位一条记录。
       聚集索引:聚集索引也是唯一的。(因为聚集索引的划分依据是物理存储)。而聚集索引的主要是为了快速的缩小查找范围,即记录数目未定。
       主键和索引没有关系。他们的用途相近。如果聚集索引加上唯一性约束之后,他们的作用就一样了。

使用场景


基于上述的两种规则,那么在什么时候适合聚集索引,什么时候适合非聚集索引?
试用场景


       如果你理解了数据库是如何使用索引的,那么你在看上一篇文章《高并发下update产生的死锁》就很容易明白了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【数据库SQL】——聚集索引和非聚集索引根本区别以及使用方式

在上篇博客中小编主要讲解聚集索引和非聚集索引概念性知识,以及两种索引方式的选择。本文主要讲解两种索引的根本区别,并且用实例展示两种索引的使用方式。 根本区别     聚集索引和非聚集索引的根本区别是表...
  • jiadajing267
  • jiadajing267
  • 2017年01月17日 11:44
  • 3408

聚集索引和非聚集索引的区别

实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index...
  • Little_Code
  • Little_Code
  • 2016年08月23日 09:34
  • 625

SQL SERVER 聚集索引 非聚集索引 区别

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

聚集索引与非聚集索引的区别

聚集索引和非聚集索引是SQL SERVER 数据库中的索引类型。一、聚集索引1.定义聚集索引中键值的逻辑顺序决定了表中相应行的物理存储位置,因此一个表中只能有一个聚集索引。索引的逻辑顺序与相应行的物理...
  • u011300968
  • u011300968
  • 2017年08月02日 18:10
  • 108

聚集索引和非聚集索引的区别理解

对于大多数的非专业的数据库操作人员来讲,比如我们这些软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然。造成这种情况的主要原因我觉的是行业原因...
  • liu_ben_qian
  • liu_ben_qian
  • 2013年01月06日 14:28
  • 13603

SQL聚集索引和非聚集索引的区别

其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然。造成这种情况的主要原因我觉的是行业原因,有很多公司...
  • WarcraftJimmy
  • WarcraftJimmy
  • 2012年06月13日 23:19
  • 22406

聚集索引和非聚集索引的根本区别

聚集索引和非聚集索引的根本区别: 【1】 聚集索引:        表排列顺序:表记录的排列顺序与索引的排列顺序一致。        查询速度快:因为一旦具有第一个索引值的纪录被找到,具有连续索...
  • y5457
  • y5457
  • 2012年08月12日 08:12
  • 592

聚集索引和非聚集索引的区别是什么

聚集索引      在创建聚集索引时,将会对表进行复制,对表中的数据进行排序,然后删除原始的表。因此,数据库上必须有足够的空闲空间,以容纳数据复本。默认情况下,表中的数据在创建索引时排序。但是...
  • jkpi888
  • jkpi888
  • 2013年11月04日 19:47
  • 1098

聚合索引和非聚合索引

收集点面试常问道的索引问题 1. 什么是聚合索引(clustered index) / 什么是非聚合索引(nonclustered index)?  2. 聚合索引和非聚合索引有什么区别?...
  • wanghuan203
  • wanghuan203
  • 2013年07月31日 18:51
  • 10370

聚集索引与非聚集索引的结构与使用

一、深入浅出理解索引结构   实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(...
  • jiang_bing
  • jiang_bing
  • 2011年12月04日 08:36
  • 1928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速理解聚集索引和非聚集索引
举报原因:
原因补充:

(最多只允许输入30个字)