什么是聚集索引和非聚集索引.doc

合集下载

主键、唯一索引、聚集索引和非聚集索引的说明

主键、唯一索引、聚集索引和非聚集索引的说明

主键、唯一索引、聚集索引和非聚集索引的说明在使用SQL数据库时,为了提高检索数据的效率,确保数据唯一性,往往会建立适当的索引。

在建立索引过程中,我们需要了解4个基本的索引关键词:主键、唯一索引、聚集索引和非聚集索引。

一、主键主关键词,是一种约束,用于唯一地标志表中的某一条记录,具有唯一性,不能重复,也不能为空(NULL)。

一张表只能有一个主键。

主键在创建时,该列会被默认同时创建唯一索引和聚集索引(在表中尚未创建聚集索引时)。

若在表中已存在其他某列为聚集索引时,被创建主键的那一列则默认同时创建唯一索引和非聚集索引。

这说明,主键与聚集索引并不是必须绑定的。

二、唯一索引唯一索引是一种索引,它不一定是主键,它的作用是确保列的唯一性。

唯一索引列允许空值(NULL)。

一张表可以创建多个唯一索引。

三、聚集索引聚集索引基于数据行的键值,在表内排序和存储这些数据行。

在聚集索引中,表中行记录的物理排列顺序与聚集索引的键值顺序一致,因此每张表只能建立一个聚集索引。

简单来说,聚集索引就是物理排列,以新华字典做比喻,字典中的字都是按照拼音字母顺序排列,因此可以将按拼音字母排列视为聚集索引的顺序,是与实际存储字的物理顺序是一致的。

聚集索引可以同时是唯一索引。

四、非聚集索引因为一张表中只能存在一个聚集索引,因此可以在表中建立多个非聚集索引实现数据快速检索。

表中的数据并不按照非聚集索引列的顺序存储,但非聚集索引的索引行中保存了非聚集键值和行定位器,可以快捷地根据非聚集键的值来定位记录的存储位置。

同样以新华字典做比喻,非聚集索引查找记录的方式,即为通过偏旁部首查找字。

字的物理顺序并不按照偏旁部首的顺序排列,但是可以通过偏旁部首定位到字。

非聚集索引可以同时是唯一索引。

五、总结(1)主键一定是唯一的,但是不一定是聚集索引或非聚集索引。

(2)唯一索引可以是主键,也可以是聚集索引或非聚集索引。

(3)聚集索引一张表最多只能存在一列,可以是唯一或不唯一。

索引使用原则

索引使用原则

索引使用原则一、什么是索引在信息检索领域,索引是指为了实现高效的信息存储和检索而对文档进行结构化存储和组织的一种数据结构。

索引能够降低数据访问的成本,提高查询效率,是信息检索系统中的核心组成部分。

二、索引的作用1.提高检索效率:通过索引,可以快速定位到目标文档,减少了全文扫描的时间成本,提高了检索效率。

2.优化查询性能:索引可以减少查询的数据量,缩小了查询范围,加速了查询速度。

3.支持高效排序:在索引的基础上,可以对结果进行排序,提供更加灵活的排序功能。

4.保证数据完整性:通过索引,可以为数据库中的数据添加唯一性约束、主键约束等,保证数据的完整性和一致性。

三、索引的分类1. 主键索引主键索引是对表的主键字段进行索引,保证了主键的唯一性和非空性。

主键索引在实际应用中的查询效率很高,是数据库设计的重要考虑因素之一。

2. 唯一索引唯一索引是对表的某个字段进行索引,并保证该字段的唯一性。

唯一索引可以加速对该字段的查询效率,并且保证数据的唯一性,常用于身份证号、手机号等需要唯一性的字段。

3. 聚集索引聚集索引是根据表的主键字段进行排序的索引,表中的数据是按照主键的顺序存储的。

聚集索引的优点是可以提高查询效率,但也有一些限制,例如只能有一个聚集索引。

4. 非聚集索引非聚集索引是根据非主键字段进行排序的索引,非聚集索引的数据结构与表中的数据存储结构是分离的。

非聚集索引可以提高查询效率,同时允许多个非聚集索引存在。

5. 全文索引全文索引是对文本内容进行索引,可以实现对文本的全文检索。

全文索引可以对数据库中的文本字段进行搜索,常用于文章、新闻等需要全文检索的场景。

四、索引使用原则1. 对频繁查询的字段进行索引针对经常被查询的字段,如主键、外键等,应该建立相应的索引,以提高查询效率。

2. 尽量避免对低基数字段进行索引如果某个字段的取值范围非常小,且取值分布均匀,那么对该字段建立索引是没有意义的,因为索引的选择性很低,查询优化器可能会选择全表扫描。

聚集索引与非聚集索引

聚集索引与非聚集索引

聚集索引与⾮聚集索引1、聚集索引定义:数据⾏的物理顺序与列值(⼀般是主键的那⼀列)的逻辑顺序相同,⼀个表中只能拥有⼀个聚集索引。

聚集索引对于那些经常要搜索范围值的列特别有效。

使⽤聚集索引找到包含第⼀个值的⾏后,便可以确保包含后续索引值的⾏在物理相邻。

例如,如果应⽤程序执⾏的⼀个查询经常检索某⼀⽇期范围内的记录,则使⽤聚集索引可以迅速找到包含开始⽇期的⾏,然后检索表中所有相邻的⾏,直到到达结束⽇期。

这样有助于提⾼此类查询的性能。

同样,如果对从表中检索的数据进⾏排序时经常要⽤到某⼀列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进⾏排序,从⽽节省成本。

当索引值唯⼀时,使⽤聚集索引查找特定的⾏也很有效率。

例如,使⽤唯⼀雇员 ID 列 emp_id 查找特定雇员的最快速的⽅法,是在emp_id 列上创建聚集索引或 PRIMARY KEY 约束。

2、⾮聚集索引 ⼀种索引,该索引中索引的逻辑顺序与磁盘上⾏的物理存储顺序不同。

索引是通过⼆叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。

⽽⾮聚簇索引的叶节点仍然是索引节点,只不过有⼀个指针指向对应的数据块。

注:除了聚集索引以外的索引都是⾮聚集索引,只是⼈们想细分⼀下⾮聚集索引,分成普通索引,唯⼀索引,全⽂索引。

如果⾮要把⾮聚集索引类⽐成现实⽣活中的东西,那么⾮聚集索引就像新华字典的偏旁字典,他结构顺序与实际存放顺序不⼀定⼀致。

3、总结:(1)使⽤聚集索引的查询效率要⽐⾮聚集索引的效率要⾼,但是如果需要频繁去改变聚集索引的值,写⼊性能并不⾼,因为需要移动对应数据的物理位置。

(2)⾮聚集索引在查询的时候可以的话就避免⼆次查询,这样性能会⼤幅提升。

(3)不是所有的表都适合建⽴索引,只有数据量⼤表才适合建⽴索引,且建⽴在选择性⾼的列上⾯性能会更好。

两种基本索引类型

两种基本索引类型

两种基本索引类型:
顺序索引:基于值的顺序排序。

散列索引:基于将值平均分布到若干散列桶中。

顺序索引
聚集索引:索引顺序和物理存储顺序相同,又称为“主索引”
非聚集索引:索引顺序与物理存储顺序不同,又称为“辅助索引”
稠密索引:文件中每个搜索码值都有一个索引记录
稀疏索引:只为搜索码的某些值建立索引
辅助索引必须是稠密索引,而聚集索引可以是稀疏索引。

稠密索引能够比稀疏索引更快的定位一条记录。

但是,稀疏索引相比于稠密索引的优点是:它所占空间更小,且插入和删除时的维护开销也小。

设计者必须在存储时间和空间开销之间权衡,为每个块建立一个稀疏索引是一个比较好的折中。

因为处理数据库请求的开销主要是把块从磁盘读到主存中的时间决定。

一旦把块放入主存,扫描整个块的时间可以忽略。

索引的匹配的规则-概述说明以及解释

索引的匹配的规则-概述说明以及解释

索引的匹配的规则-概述说明以及解释1.引言1.1 概述索引是一种用于快速定位和检索数据的数据结构。

它可以帮助我们更加高效地搜索和访问数据库中的信息。

在现代数据库系统中,索引被广泛应用于不同的领域,如搜索引擎、关系型数据库等。

在索引的运作过程中,我们需要将索引与待匹配的数据进行比较,以找到所需的信息。

为了提高匹配的准确度和效率,我们需要遵循一些规则和原则。

首先,索引匹配的规则需要考虑数据的一致性和完整性。

即对于每一条数据,我们要确保所有可能用于匹配的关键字都能被正确地建立索引。

如果关键字存在一定程度的不一致或错误,将会导致数据的不准确性和匹配的失败。

其次,索引匹配的规则需要考虑索引的选择和设计。

合理选取索引字段,并对其进行适当的数据类型和长度定义,能够提高匹配的准确性和效率。

同时,对于大规模的数据集,我们还需要考虑使用多列索引或者复合索引的方式。

此外,索引匹配的规则还需要考虑数据的统计特性和查询模式。

通过对数据进行统计分析和查询模式的了解,我们可以针对性地设计和优化索引,提高匹配的准确性和效率。

如选择合适的索引数据结构、调整索引的存储方式等。

总之,索引匹配的规则是在索引的设计、选择和查询模式等方面根据实际需求进行制定的。

通过合理遵循这些规则,我们可以更好地利用索引来提高数据的查找效率,并实现快速准确地匹配。

1.2文章结构1.2 文章结构文章的结构是整篇文章的骨架,它决定了文章的逻辑框架,使读者更容易理解和理清文章的思路。

一个合理的文章结构应当包含引言、正文和结论三个部分。

1.2.1 引言引言部分是文章的开端,旨在引起读者的兴趣并建立背景。

在引言中,我们可以介绍索引的概念和重要性,概述本文要讨论的内容,以及本文的目的和意义。

通过引言部分,读者可以对全文有个初步的了解,并对所要讨论的主题产生兴趣。

1.2.2 正文正文是文章的主体部分,也是对索引的匹配规则进行详细阐述的地方。

在正文部分,我们可以依次介绍索引的定义、作用和分类。

SQLSERVER聚集索引非聚集索引区别

SQLSERVER聚集索引非聚集索引区别

SQLSERVER聚集索引⾮聚集索引区别⼀、理解索引的结构 索引在数据库中的作⽤类似于⽬录在书籍中的作⽤,⽤来提⾼查找信息的速度。

使⽤索引查找数据,⽆需对整表进⾏扫描,可以快速找到所需数据。

微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和⾮聚集索引(nonclustered index,也称⾮聚类索引、⾮簇集索引)。

SQL Server 中数据存储的基本单位是页(Page)。

数据库中的数据⽂件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0到 n 连续编号)。

磁盘 I/O 操作在页级执⾏。

也就是说,SQL Server 每次读取或写⼊数据的最少数据单位是数据页。

下⾯我们先简单的了解⼀下索引的体系结构: 1. 聚集索引结构 在 SQL Server 中,索引是按 B 树结构进⾏组织的。

聚集索引单个分区中的结构:--建⽴UserAddDate聚集索引CREATE CLUSTERED INDEX [IX_AddDate] ON [User]([AddDate] ASC) 聚集索引的叶节点就是实际的数据页聚集索引中的排序顺序仅仅表⽰数据页链在逻辑上是有序的。

⽽不是按照顺序物理的存储在磁盘上⾏的物理位置和⾏在索引中的位置是相同的每个表只能有⼀个聚集索引聚集索引的平均⼤⼩⼤约为表⼤⼩的5%左右 2. ⾮聚集索引结构 ⾮聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点: 1. 基础表的数据⾏不按⾮聚集键的顺序排序和存储。

2. ⾮聚集索引的叶层是由索引页⽽不是由数据页组成。

下图⽰意了单个分区中的⾮聚集索引结构: 包含列的索引 通过将包含列(称为⾮键列)添加到索引的叶级,可以扩展⾮聚集索引的功能。

键列存储在⾮聚集索引的所有级别,⽽⾮键列仅存储在叶级别。

下⾯举个简单的例⼦来说明⼀下聚集索引和⾮聚集索引的区别: 我们有⼀本汉语字典,可以把它的正⽂本⾝看做是⼀个聚集索引,它是按照汉字拼⾳的开头字母排序的,不再需要查找其他⽬录。

数据库聚集索引和非聚集索引

数据库聚集索引和非聚集索引

数据库聚集索引和非聚集索引
数据库聚集索引和非聚集索引
1.什么是聚集索引
聚集索引(clustered index)是一种特殊的索引,它可以把数据表中的记录按照关键字排序,使得索引有序而连续。

一个数据表只能有一个聚集索引,也就是说,一个数据表只能有一种排序方式。

每次插入一条新的记录,都会建立一个新的索引,来保持整个索引的顺序。

查询时,聚集索引会把查询的结果以排好序的方式返回给客户端,从而提高查询效率。

2.什么是非聚集索引
非聚集索引(non-clustered index)是一种用来加速查询的数据库结构,它实际上是一个指向真实数据表的索引,提供了查询时可以快速定位真实数据表中记录的功能。

非聚集索引本身没有任何排序,而是按照索引的键,建立一种新的排列顺序,以便快速检索数据。

非聚集索引可以提高查询效率,但是其建立的额外空间开销比聚集索引要大。

3.聚集索引与非聚集索引的区别
(1)聚集索引实际上是表中的数据,而非聚集索引只是一个指向真实数据表的索引。

(2)聚集索引自身有序,而非聚集索引本身没有任何排序,但是按照索引的键可以快速检索数据。

(3)一个数据表只能有一个聚集索引,而一个数据表可以有多
个非聚集索引。

(4)聚集索引的建立需要消耗更多的空间,而非聚集索引的建立需要的空间更少。

聚集索引与非聚集索引详解

聚集索引与非聚集索引详解

SQL中、聚集索引和非聚集索引有何区别?聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。

聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。

建议使用聚集索引的场合为: a.此列包含有限数目的不同值; b.查询的结果返回一个区间的值;c.查询的结果返回某值相同的大量结果集。

非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。

非聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。

建议使用非聚集索引的场合为: a.此列包含了大量数目不同的值; b.查询的结束返回的是少量的结果集; c.order by 子句中使用了该列。

聚集索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大非聚集索引:不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很少主要是存储的顺序的调整不同。

这样对一些操作的影响不同。

有利就有弊,两个之间属于对立和弥补的关系。

主要看你需要怎样的应用了。

聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致一个表只能有一个聚集索引非聚集索引是完全独立与数据行的结构,表中的数据行不按非聚集键的次序存储,存储数据过程中不会影响数据表中记录的实际存储顺序每个表可以创建249个非聚集索引1 对于经常更新的列不宜建立聚集索引2 具有高百分比的唯一值和不经常被修改的属性上创建聚集索引例如:主键3 若在一个表中既要创建聚集索引,又要创建非聚集索引,应先创建聚集索引,然后创建非聚集索引SQL Server创建索引什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

什么是聚集索引和非聚集索引
(1)非聚集索引
非聚集索引与课本中的索引类似。

数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。

索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。

如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。

典型的桌面数据库使用的是非聚集索引。

在这类索引中,索引键值是有序的,而每个索引节点所指向的数据行是无序的。

一个SQL Server表最多可以拥有255个非聚集索引。

非聚集索引与聚集索引一样有B-树结构,但是有两个重大差别:
1、数据行不按非聚集索引键的顺序排序和存储。

2、非聚集索引的叶层不包含数据页。

相反,叶节点包含索引行。

每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。

非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。

在SQL Server中,非聚集索引中的行定位器有两种形式:
1、如果表是堆集(没有聚集索引),行定位器就是指向行的指针。

该指针用文件标识符(ID)、页码和页上的行数生成。

整个指针称为行ID。

2、如果表是堆集(没有聚集索引),行定位器就是指向行的指针。

该指针用文件标识符(ID)、页码和页上的行数生成。

整个指针称为行ID。

由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。

如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。

在创建非聚集索引之前,应先了解您的数据是如何被访问的。

可考虑将非聚集索引用于:
包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。

如果只有很少的非重复值,如只有 1 和0,则大多数查询将3、不使用索引,因为此时表扫描通常更有效。

1、不返回大型结果集的查询。

2、返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。

3、经常需要联接和分组的决策支持系统应用程序。

应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。

4、在特定的查询中覆盖一个表中的所有列。

这将完全消除对表或聚集索引的访问。

(2)聚集索引
聚集索引确定表中数据的物理顺序。

聚集索引类似于电话簿,后者按姓氏排列数据。

由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。

但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

聚集索引在系统数据库表sysindexes 内有一行,其indid = 1。

数据链内的页和其内的行按聚集索引键值排序。

所有插入都在所插入行中的键值与排序顺序相匹配时执行。

SQL Server将索引组织为B-树。

索引内的每一页包含一个页首,页首后面跟着索引行。

每个索引行都包含一个键值以及一个指向较低级页或数据行的指针。

索引的每个页称为索引节点。

B-树的顶端节点称为根节点。

索引的底层节点称为叶节点。

每级索引中的页链接在双向链接列表中。

在聚集索引内数据页组成叶节点。

根和叶之间的任何索引级统称为中间级。

对于聚集索引,sysindexes.root 指向它的顶端。

SQL Server 沿着聚集索引浏览以找到聚集索引键对应的行。

为找到键的范围,SQL Server 浏览索引以找到这个范围的起始键值,然后用向前或向后指针扫描数据页。

为找到数据页链的首页,SQL
Server 从索引的根节点开始沿最左边的指针进行扫描.
聚集索引对于那些经常要搜索范围值的列特别有效。

使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。

例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。

这样有助于提高此类查询的性能。

同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。

对于聚集索引,人们往往有一些错误的认识。

其中,最常见的错误有:
1、聚集索引会降低insert操作的速度,因为必须要向后移动一半的数据来为新插入的行腾出空间。

这种认识是错误的,因为可以利用填充因子控制填充的百分比,从而在索引页上为新插入的数据保留空间。

如果索引页填满了,SQL Server 将会进行页拆分,在这种情况下只有第一个页才会受到影响。

2、在使用标识列的主键上创建聚集索引是一种好的设计方法,它可以使对表的操作达到最快速度。

这种认识是错误的,它浪费了创建其它更有效的聚集索引的机会。

并且,使用这种方法会把每个新插入的记录行都存储到表尾部的同一个的数据页中,这将导致数据库的热点和锁争用。

笔者曾经见过采用这种方法设计的数据库,对于每一个新订单,客户服务人员都不得不等待数分钟来加以确认。

3、聚集索引是具有魔力的。

如果哪个查询的速度不够快,那么就在该列上创建聚集索引,对于表的操作速度一定会得到提高。

这种认识也是错误的,聚集索引只是比非聚集索引稍稍快了那么一点点。

因为在每个表上只能创建一个聚集索引,所以它也是一种宝贵的性能资源,只有在那些经常作为条件查询一组记录行的列上才应该建立聚集索引。

在创建聚集索引之前,应先了解数据是如何被访问的。

可考虑将聚集索引用于:
1、包含大量非重复值的列。

2、使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和<=。

3、被连续访问的列。

4、返回大型结果集的查询。

5、经常被使用联接或GROUP BY 子句的查询访问的列;一般来说,这些是外键列。

对ORDER BY 或GROUP BY 子句中指定的列进行索引,可以使SQL Server 不必对数据进行排序,因为这些行已经排序。

这样可以提高查询性能。

6、OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。

应在主键上创建聚集索引。

注意,聚集索引不适用于:
1、频繁更改的列,这将导致整行移动(因为SQL Server 必须按物理顺序保留行中的数据值)。

这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。

2、宽键,来自聚集索引的键值由所有非聚集索引作为查找
键使用,因此存储在每个非聚集索引的叶条目内。

相关文档
最新文档