`

聚集索引与非聚集索引的基本概念

阅读更多
聚集索引,是一种指明表数据物理存储顺序的索引.在聚集索引中,行的物理存储顺序与索引顺序完全相同,即索引的顺序决定了表中行的存储顺序.表数据按照指定作为聚集索引的一个或多个键列排序并存储.聚集索引类似于一本字典,字典按照字母顺序存储信息,并提供引导字帮助用户快速定位信息的位置,在同一页上找到数据和它的引导字.相似的,聚集索引含有索引页和实际数据页,数据页组成聚集索引的最底层(叶子节点).根节点中的每行将分别指向分支节点,分支节点的行又将指向其他的分支节点,最后一组分支节点将最终指向叶子节点.当你到达索引的最底层(即叶子节点)时,也就已经到达实际数据页了.因为数据按照一个指定的顺序物理地存储,所以你只能为每个表创建一个聚集索引.

非聚集索引与聚集索引不同,它并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序.索引仅仅记录指向表中行的位置的指针,这些指针本身是有序的,通过这些指针可以在表中快速地定位数据.在它的叶子节点中不含有实际表数据,取而代之的是,索引本身完全与数据分离,就像一本在书的后面带有索引的书(索引只是指明到哪一页,而数据并不与索引本身在一起).非聚集索引的叶子节点含有索引行,用于存储决定行确定位置的索引数据和信息.位置信息可以是两种类型之一,取决于表上是否存在聚集索引.如果有聚集索引,那么对于每行,聚集索引的键值存储在非聚集索引的叶子节点之中,作为该行的定位器.这个值可以被直接用来定位数据,它位于聚集索引的叶子节点之中.如果聚集索引不是一个惟一索引, SQL Server就自动地为所有相同的索引键值分配一个内部值,让它们惟一地以非聚集索引方式使用.这个内部值对于用户来说是不可见的.如果表上没有聚集索引,那么每个叶子节点含有一个行ID作为行的定位器,而不是聚集索引的一个键值.行ID是一个指针,由文件ID,页数目和页中的行数目组成.这个指针能够精确地指示在哪里可以找到行,所以一旦到达行ID,只需要再进行一次I/O便可以读取数据行.



分享到:
评论

相关推荐

    MySQL索引之聚集索引介绍

    在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别? 在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。 也有人把聚集索引...

    JAVA面试题MySQL索引原理及索引优化校招面试找工作笔试

    B+树介绍,为什么选择B+树,非聚集索引 聚集索引 第一点、第二点、第三点 不建议使用过长的字段,不建议使用非自增字段作为主键 什么条件下使用索引? 索引选择性,行数前缀索引 所谓索引的选择性是指不重复的索引值...

    mysql结构和索引简介.png

    mysql结构和索引简介,包含日志文件和数据文件的分析。索引的分类及其。聚集索引和非聚集索引的概念和区别 及其简单介绍B Tree 和B+ Tree的区别和概念

    SQL Server中事务,索引,触发器,游标

    非聚集索引(三)创建索引唯一索引:聚集索引:非聚集索引:(四)删除索引(五)索引的优点(六)索引的缺点 三、触发器(一)触发器概念(二)触发器的优点(三)触发器的作用(四)触发器的分类1.DML(数据操作...

    常见(MySQL)面试题(含答案).docx

    聚集索引与非聚集索引的区别 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别? MySQL常见的存储引擎InnoDB、MyISAM的区别?【~】 ...

    SQL Server 2008数据库设计与实现

     9.4.3 聚集表上的非聚集索引  9.5 索引创建的基本方法  9.6 基本的索引使用模式  9.6.1 使用聚集索引  9.6.2 使用非聚集索引  9.6.3 使用唯一索引  9.7 高级的索引使用案例  9.7.1 外键索引  ...

    SQL Server数据库中伪列及伪列的含义详解

    下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值;对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个常识,对此不作具体详细阐述。 这里主要...

    数据库应用 实验三

    总体实验目的 1)理解视图的概念 2)了解数据表的结构特点 ...6)学会创建唯一、聚集、非聚集以及复合索引 7)学会查看和修改索引选项,以及给索引改名和删除索引 9)学会数据汇总、连接查询、嵌套查询的方法

    精心整理的数据库系统概论复习题.doc

    视图是从一个或几个基本表中导出的表,它与基本表不同,是一个虚表。 联系:视图对应的数据仍然存放在导出视图的表中,视图是一个虚表。 区别:一个(或多个)基本表对应一个存储文件,视图本身不独立存储在数据库...

    SQL Server 2008高级程序设计 5/6

     9.1 脚本的基本概念  9.2 批处理  9.3 SQLCMD  9.4 动态SQL:使用EXEC命令生成即时代码  9.5 流控制语句  9.6 小结 第10章 高级编程  10.1 细看存储过程  10.2 表值参数(TVP)  10.3 调试  10.4...

    SQL Server 2008高级程序设计 4/6

     9.1 脚本的基本概念  9.2 批处理  9.3 SQLCMD  9.4 动态SQL:使用EXEC命令生成即时代码  9.5 流控制语句  9.6 小结 第10章 高级编程  10.1 细看存储过程  10.2 表值参数(TVP)  10.3 调试  10.4...

    SQL Server 2008高级程序设计 6/6

     9.1 脚本的基本概念  9.2 批处理  9.3 SQLCMD  9.4 动态SQL:使用EXEC命令生成即时代码  9.5 流控制语句  9.6 小结 第10章 高级编程  10.1 细看存储过程  10.2 表值参数(TVP)  10.3 调试  10.4...

    SQL Server 2008高级程序设计 1/6

     9.1 脚本的基本概念  9.2 批处理  9.3 SQLCMD  9.4 动态SQL:使用EXEC命令生成即时代码  9.5 流控制语句  9.6 小结 第10章 高级编程  10.1 细看存储过程  10.2 表值参数(TVP)  10.3 调试  10.4...

    sql2005全文检索.doc

     首先, 让我们建立检索表的全文检索,全文检索要求唯一索引,故需要在相关表建立唯一聚集索引。  第二步,使用SQL DDL或者SQL Server Management Studio建立表的全文检索。  1)使数据库支持全文检索。   图...

    SQL Server 2008高级程序设计 2/6

     9.1 脚本的基本概念  9.2 批处理  9.3 SQLCMD  9.4 动态SQL:使用EXEC命令生成即时代码  9.5 流控制语句  9.6 小结 第10章 高级编程  10.1 细看存储过程  10.2 表值参数(TVP)  10.3 调试  10.4...

    SQL Server 2008高级程序设计 3/6

     9.1 脚本的基本概念  9.2 批处理  9.3 SQLCMD  9.4 动态SQL:使用EXEC命令生成即时代码  9.5 流控制语句  9.6 小结 第10章 高级编程  10.1 细看存储过程  10.2 表值参数(TVP)  10.3 调试  10.4...

    软件工程知识点

    系统需求是比用户需求更具有技术特性的需求陈述,是提供给开发者或用户方技术人员阅读的,并将作为软件开发人员设计系统的起点与基本依据。主要包括:功能、数据、性能、安全等诸多方面的需求问题。 2.需求分析过程 ...

    数据库管理系统重要知识点整理.doc

    14关系数据库常用的存取方法有索引方法、聚簇方法和HASH方法 15数据库的维护工作:1、数据库的转储和恢复2、数据库的安全性、完整性控制。3、数 据库性能的监督、分析和改造4、数据库的重组织与重构造 16笛卡儿积...

Global site tag (gtag.js) - Google Analytics