索引简介

简介:

很多人对索引都没有一个清晰的认识,对于聚集索引和非聚集索引之间的区别也不是很清楚。如果有人问我索引是什么,我觉得这个问题有点大,很难在一篇文章里解释清楚。所以我决定尝试写这一系列文章,用一个简单的,可以理解的方法解释索引,尽管网上关于索引的文章有一箩筐那么多。

简单来说,索引帮助数据库引擎使用最小的资源,最高效的找到需要的数据。通过唯一列索引可以保证数据的连贯性,当索引不一定要建在唯一列上。在忙碌的系统里,通过增加并发操作,可以提高性能。在一个表上建立的各个索引可以满足不同用户的请求,但这也是个头疼的问题。索引保存在不同的页,就像数据存在不同的地方,SQL Server要保证它们的一致性。对表的任何INSERT,UPDATE,DELETE操作,对应的索引页会执行相同的操作。索引帮助我们提高获取数据的性能,但对DML操作却是个麻烦。在DELETE和UPDATE里,索引会帮助数据库引擎找到需要修改的记录。一个表要建多少个索引并没有诀窍(thrumb rule)。如果你要更好的读性能,你可以创建更多的索引,如果你要更好DML操作性能,请保持最小数量的索引。

SQL Server支持2类索引:

  • 聚集索引(Clustered Index:CI)
  • 非聚集索引(Non Clustered Index:NCI)

让我们用现实生活中的例子来理解这2类索引。假设你的邻居到你家,问你“Woody Tu”的电话号码。在这种情况下,电话本目录就是个聚集索引。你打开电话本目录,跳过3/4的页,假定他的名字应该出现在目录的最后一部分。在前后翻过几页后,你找到了列有“Woody Tu”名字的页。现在你就可以把号码告诉你的邻居了。看看这里发生了什么?当你找到了列有“Woody Tu”名字的页时,你就有了你邻居(客户端)需要的信息。

我们再看另一个情况,你的邻居到你家,问你“Woody Tu”的电子邮件地址,而你并不记得。在这个情况下,电话本目录会扮演非聚集索引的角色。你打开电话本目录,跳过3/4的页,假定他的名字应该出现在目录的最后一部分。在前后翻过几页后,你找到了列有“Woody Tu”名字的页。现在你可以打电话给“Woody Tu”,问下他的电子邮件地址是多少。挂下电话后,你可以把他的电子邮件地址交给你的邻居。看看这里发生了什么?当你找到了列有“Woody Tu”名字的页时,你并没有邻居(客户端)需要的信息。你需要去做一个额外操作(打电话)来获得邻居(客户端)需要的信息。在SQL Server里,这个额外操作被称为书签/RID查找(Bookmark or RID Lookup,注:RID,堆的行标识符(FileID:PageID:SlotNumber))。

希望这个介绍可以让你对聚集索引和非聚集索引有了感性的认识。在接下来的文章里,我们会讨论聚集索引和非聚集索引的更多细节。


本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/4497187.html,如需转载请自行联系原作者

相关文章
|
25天前
|
存储 Java 数据库
深入剖析---数据表如何用索引
【11月更文挑战第25天】在大数据时代,处理千万级数据表已成为许多企业和开发者必须面对的挑战。如何快速、高效地查询这些数据,成为衡量系统性能的关键指标之一。索引,作为数据库优化中最重要的工具之一,通过特定的数据结构和算法,能够显著提高查询效率。本文将从第一原理出发,对索引的相关概念、业务场景、历史背景、功能点、底层原理进行深入分析,并使用Java模拟索引的底层实现。
25 1
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——索引(1)-概述以及B-Tree结构
MySQL数据库——索引(1)-概述以及B-Tree结构
37 0
|
存储 JSON 自然语言处理
|
存储 JSON 自然语言处理
三.全文检索ElasticSearch经典入门-索引CRUD&分词器&文档映射&文档CRUD
三.全文检索ElasticSearch经典入门-索引CRUD&分词器&文档映射&文档CRUD
|
存储 自然语言处理 算法
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
MySQL中的索引包括普通索引、全文索引、单列索引、多列索引和空间索引等。
391 0
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
|
NoSQL MongoDB 开发者
索引的使用 涵盖的查询 | 学习笔记
快速学习 索引的使用 涵盖的查询
索引的使用 涵盖的查询 | 学习笔记
|
JSON 分布式计算 Hadoop
创建索引库和索引演示 | 学习笔记
快速学习创建索引库和索引演示
创建索引库和索引演示 | 学习笔记
|
存储 SQL 关系型数据库
【MySQL从入门到精通】【高级篇】(二十九)覆盖索引的使用&索引下推
上一篇文章我们介绍了 【MySQL从入门到精通】【高级篇】(二十八)子查询优化,排序优化,GROUP BY优化和分页查询优化。这篇文章我们接着来介绍覆盖索引。
219 0
|
JSON 数据格式 开发者
创建索引库和索引说明 | 学习笔记
快速学习创建索引库和索引说明
创建索引库和索引说明 | 学习笔记
|
NoSQL API 数据库
ElasticSearch学习笔记(二)—结构了解和索引文档增删改
前面学习了ElasticSearch的概况以及一些配套插件的安装。这篇旨在记录对ES结构的了解和一些基本的操作。
123 0
ElasticSearch学习笔记(二)—结构了解和索引文档增删改