`
uule
  • 浏览: 6350251 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

聚集索引/非聚集索引

 
阅读更多

https://blog.csdn.net/u014496330/article/details/53056271

 

B+树索引可以分为聚集索引和辅助索引。聚簇索引是按照数据存放的逻辑地址为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

 

聚集索引 

聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。 

聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。 

InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。 

辅助索引中,叶结点的data域存放的是对应记录的主键的key。 

对于建立辅助索引的表需要先根据辅助索引找到相应的主键,再根据主键在聚集索引中找到相应的记录集。

 

非聚集索引 

非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。 

主键索引中,叶节点的data域存放的是数据记录的地址,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。(MYISAM采用此种索引方式)。

 

区别

 

聚集索引表里数据物理存储顺序和主键索引的顺序一致,所以如果新增数据是离散的,会导致数据块趋于离散,而不是趋于顺序。而非聚集索引表数据写入的顺序是按写入时间顺序存储的。

 

聚簇索引索引的叶节点就是数据节点;而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

 

1、定义 + 区别

聚集索引将一张表中的多行数据按排好的顺序进行物理存储,一个表只能建一个;
非聚集索引是指向表中的数据并独立于表的一种物理存储结构,一个表可以建多个;
可见,建立非聚集索引需要冗余的表空间,好处就是可以建立多个,但速度要比聚集索引慢。

 

 

聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
  a.此列包含有限数目的不同值;
  b.查询的结果返回一个区间的值;
  c.查询的结果返回某值相同的大量结果集。
    1、您最频繁使用的、用以缩小查询范围的字段上;
    2、您最频繁使用的、需要排序的字段上。

 

非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用非聚集索引的场合为:
  a.此列包含了大量数目不同的值;
  b.查询的结束返回的是少量的结果集;
  c.order   by   子句中使用了该列。

 

  

2、聚集索引:
  该索引中键值的逻辑顺序决定了表中相应行的物理顺序。

如果用 新华字典 作例子来一个例子的话。
  [拼音]就可以看作是聚集索引
    例如 吖、阿、啊 在字典的最前面。
    左、作、坐 在字典的最后面。
    拼音[逻辑顺序]很接近,在字典中页数的位置[物理顺序]也很接近。

适用场合:
  含有大量非重复值的列
  使用BETWEEN,>,>=,<或<=返回一个范围值的列
  被连续访问的列
  返回大型结果集的查询
  经常被使用连接或GROUP BY子句的查询访问的列



非聚集索引:
  非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别:
  数据行不按非聚集索引键的顺序排序和存储。
  非聚集索引的叶层不包含数据页。
  相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,
  这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。

如果用 新华字典 作例子来一个例子的话。
  [笔画]就可以看作是非聚集索引
    例如 化 仇 仃 仅 仂 这几个字,都是 单人旁,笔画数相同的。
    笔画[逻辑顺序]很接近,在字典中页数的位置[物理顺序]则在不同的位置上。

适用场合:
  含有大量非重复值的列
  非连续访问的列
  返回小型结果集的查询

分享到:
评论

相关推荐

    索引介绍聚集索引和非聚集索引

    ### 索引介绍:聚集索引与非聚集索引 #### 一、索引的基本概念 在数据库中,索引是一种特殊的文件结构,它的主要目的是为了提高数据检索的速度。索引通过创建一种数据结构(例如B树)来实现这一点,这种结构允许...

    SQL Server 索引结构及其使用(聚集索引与非聚集索引)

    "SQL Server 索引结构及其使用(聚集索引与非聚集索引)" 数据库索引是数据库性能优化的关键技术之一。SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍...

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

    聚集索引和非聚集索引是数据库管理系统中两种重要的索引类型,它们在数据库查询优化中扮演着关键角色。理解这两种索引的区别对于优化数据库性能至关重要。 首先,聚集索引(Clustered Index)决定了表中数据的实际...

    数据库非聚集索引 聚集索引 模式 索引

    本文将深入探讨数据库中的非聚集索引、聚集索引以及索引模式的概念,并分析它们之间的区别。 首先,让我们了解一下**非聚集索引**。非聚集索引在数据库中不按照数据的实际物理顺序存储。每个非聚集索引条目包含键值...

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

    ### 聚焦索引与非聚焦索引的深度解析 #### 一、索引的基础概念及作用 索引在数据库管理系统中扮演着至关重要的角色,它能够显著提高查询效率,减少系统的响应时间。简单来说,索引就像是图书的目录,帮助用户更快...

    SQLServer聚集索引与非聚集索引讲解[借鉴].pdf

    "SQLServer聚集索引与非聚集索引讲解" 本文主要讲解了SQL Server中的聚集索引和非聚集索引的概念、原理和应用场景。聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index)是SQL Server中两种不同的索引...

    SQLServer索引基础知识----聚集索引,非聚集索引[归纳].pdf

    SQL Server 索引基础知识----聚集索引,非聚集索引 SQL Server 索引是关系型数据库中的一种重要组件,它可以大大提高查询的效率。索引可以分为聚集索引和非聚集索引两种,本文将详细介绍这两种索引的概念、特点和...

    SQL Server 聚集索引和非聚集索引的区别分析

    索引分为两种主要类型:聚集索引和非聚集索引,它们在数据存储和查询性能上具有显著区别。 **聚集索引(Clustered Index)** 聚集索引决定了数据在磁盘上的物理顺序,这意味着表中的每一行数据都是按照聚集索引的...

    sqlserver 聚集索引和非聚集索引实例

    索引分为两种主要类型:聚集索引(Clustered Index)和非聚集索引(Nonclustered Index)。下面将详细介绍这两种索引的概念、特点以及在实际操作中的应用。 **聚集索引(Clustered Index)** 聚集索引决定了数据在...

    唯一非聚集索引变量传入时索引失效解决方案

    尝试一,将唯一非聚集索引更改为非聚集索引,使得查询能够使用索引,但这牺牲了对`Mac2`字段唯一性的保证。 尝试二,恢复唯一非聚集索引,并在查询中添加`option (recompile)`。`option (recompile)`强制每次执行时...

    浅析SQL Server 聚焦索引对非聚集索引的影响

    SQL Server中的索引是数据库性能优化的关键因素,主要分为聚集索引(Clustered Index)和非聚集索引(Nonclustered Index)。这篇文章主要探讨了聚集索引对非聚集索引的影响。 首先,让我们理解一下这两种索引的...

    在SQL Server中估算非聚集索引的大小.pdf

    在SQL Server中,非聚集索引是一种重要的数据库优化工具,用于加速数据检索。非聚集索引不同于聚集索引,后者是表数据本身按照索引排序的方式存储,而非聚集索引则包含指向表中实际数据行的逻辑指针。在设计数据库时...

    【数据库】浅析Innodb的聚集索引与非聚集索引

    Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。 本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【数据库】mysql索引简谈 在分析这两种...

    Sql Server中的非聚集索引详细介

    非聚集索引是数据库管理系统中用于加速数据检索的一种数据结构,尤其在SQL Server中扮演着重要角色。在处理复杂的SQL查询,尤其是涉及多表联接时,非聚集索引能够显著提升查询性能,减少全表扫描,从而提高系统整体...

    简单例子理解主键,索引,聚集索引,复合索引,非聚合索引

    一、 创建主键(主键=主键索引=聚集索引) 主键是什么? 答:拿主键可以唯一确定一条数据,它和物理存储排序一致,不能为空,一个表只能有一个。 原本没有创建的主键的表在磁盘上存储为: Id=0;username=username0;sex...

Global site tag (gtag.js) - Google Analytics