What is Index?索引是什么?

原创 2005年03月03日 00:15:00
  1. 数据库引入了索引
    用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。为了提高检索数据的能力,数据库引入了索引机制。
  2. 有关“索引”的比喻
    从某种程度上,可以把数据库看作一本书,把索引看作书的目录,通过目录查找书中的信息,显然较没有目录的书方便、快捷。
  3. 数据库索引实际是什么?(两部分组成)
    索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单
  4. 索引在表中的角色
    一个表的存储是由两部分组成的,一部分用来存放表的数据页面,另一部分存放索引页面。索引就存放在索引页面上,
  5. 索引高效原理
    通常,索引页面相对于数据页面来说小得多。当进行数据检索时,系统先搜索索引页面,从中找到所需数据的指针,再直接通过指针从数据页面中读取数据。
  6. 索引的分类
    在SQL Server 的数据库中按存储结构的不同将索引分为两类:簇索引(Clustered Index)和非簇索引(Nonclustered Index)。
    1. 簇索引对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即簇索引与数据是混为一体,的它的叶节点中存储的是实际的数据。由于簇索引对表中的数据一一进行了排序,因此用簇索引查找数据很快。但由于簇索引将表的所有数据完全重新排列了,它所需要的空间也就特别大,大概相当于表中数据所占空间的120% 。表的数据行只能以一种排序方式存储在磁盘上,所以一个表只能有一个簇索引。
    2. 非簇索引具有与表的数据完全分离的结构,使用非簇索引不用将物理数据页中的数据按列排序。非簇索引的叶节点中存储了组成非簇索引的关键字的值行定位器。行定位器的结构和存储内容取决于数据的存储方式。如果数据是以簇索引方式存储的,则行定位器中存储的是簇索引的索引键;如果数据不是以簇索引方式存储的,这种方式又称为堆存储方式(Heap Structure),则行定位器存储的是指向数据行的指针。非簇索引将行定位器按关键字的值用一定的方式排序,这个顺序与表的行在数据页中的排序是不匹配的。由于非簇索引使用索引页存储因此它比簇索引需要更多的存储空间且检索效率较低但一个表只能建一个簇索引,当用户需要建立多个索引时就需要使用非簇索引了。

      小结:Clustered Index 是与物理数据混在一起并对物理数据进重排,就像使用拼音查字典;Unclustered Index 是与物理数据完全分离的,利用额外空间对关键字进行重排,就像使用部首查字典。

relative links:

http://www.chinaitlab.com/www/news/article_show.asp?id=7606
http://www.windowsitpro.com/SQLServer/Article/ArticleID/8410/8410.html
http://www.vckbase.com/document/viewdoc/?id=1307
http://www.20cn.net/ns/wz/soft/data/20040111171601.htm
http://www.ddvip.net/database/mssql/index/46.htm

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

What is Index?索引是什么?

数据库引入了索引用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。为...
  • wishfly
  • wishfly
  • 2006年12月20日 11:56
  • 1004

数据库索引到底是什么,是怎样工作的?

我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引。假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name、Employee_Age 和Emp...
  • weiliangliang111
  • weiliangliang111
  • 2016年05月19日 16:37
  • 26575

JPA 中注解的作用

1. @Index @Index(name="idx_department_name") private String name; 用于添加索引,加快查找速度,索引名称为 "idx_departmen...
  • u012843873
  • u012843873
  • 2016年05月05日 13:47
  • 2766

175.What can you achieve by implementing reverse key index?

175.What can you achieve by implementing reverse key index?
  • dwj19830118
  • dwj19830118
  • 2016年08月08日 22:37
  • 661

OCP-1Z0-052-V8.02-175题

175. What can you achieve by implementing reverse key index? A.Reverse the bytes of each column inde...
  • rlhua
  • rlhua
  • 2013年10月31日 08:33
  • 10943

Git本地库中的索引(Index)及文件状态概述

Git本地库中的索引Index就是一个二进制文件,默认存储在.git/index路径下。 1.索引 索引中包含一个列表,列表根据文件名、文件模式和文件元数据进行了排序,以便快速检测文件的变化。 索引中...
  • taiyangdao
  • taiyangdao
  • 2016年10月08日 23:32
  • 2674

关于数据库索引失效的问题

在日常的维护中,经常会出现索引失效的情况,什么情况会导致索引失效呢?通过查阅资料总结如下:一般情况,在大量数据割接完以后,会发生索引实效的情况。查询dba_indexes表,其索引状态STATUS应该...
  • Magister_Feng
  • Magister_Feng
  • 2010年12月28日 14:17
  • 6343

reverse key index

是一种特殊类型的B树索引,在索引基于含有序数的列时使非常有用的,如果一个传统的B树索引基于一个含有这种数据的列,往往会产生许多级,由于B树索引有 4级以上的深度会降低性能,因此反向键索引更适合这种...
  • u014258826
  • u014258826
  • 2014年08月18日 14:06
  • 484

django models field.db_index的使用

在Django数据库访问优化中一开始的时候就有提到Django有一个Field.db_index的字段,用来帮你建立表索引,这在初始化数据库时是有效的。数据库建立完之后,再来添加这个参数就需要用sou...
  • u010700415
  • u010700415
  • 2013年06月18日 14:23
  • 5998

Oracle-index索引解读

概述Oracle-OLAP和OLTP解读Oracle-index索引解读Oracle-分区表解读Oracle-锁解读Oracle-等待事件解读Oracle-procedure/cursor解读 索引是...
  • yangshangwei
  • yangshangwei
  • 2016年10月27日 21:25
  • 3716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:What is Index?索引是什么?
举报原因:
原因补充:

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