索引 :数据库术语

更新时间:2024-09-20 20:53

索引(index)就是将图书、报刊等文献中的各种事物的名称,如书名或篇名、人名、地名、名词术语、字词句、内容主题名等,分别摘录出来,注明其出处页码,按字顺或分类排列而成的一种检索工具。该词是从日语借用过来的。借助于索引,可以“按图索骥”,从而获得隐含在文献中的知识信息,因此被认为是揭示包含在文献中的情报的钥匙。可见,它也是开发文献信息资源的一种重要工具。钱亚新先生是中原地区现代索引的奠基者,1928年开始对索引和索引法进行研究,对中国索引事业作出了巨大的贡献。

索引是一种附属性检索工具,种类繁多。按照索引收录文献的类型,可分为书后索引、期刊索引、报纸索引、专利索引、标准索引等;按照索引的载体形式,可分为卡片式索引、附录式索引、单卷式索引和期刊式索引等;按照索引收录的内容,可分为综合性索引和专题性索引等。《文华图书科丛书》是中国关于索引和索引法的第一部专著,填补了中国缺乏索引学专著的空白,是中国现代索引学奠基之作。索引法是揭示文献内容和提供检索途径的重要方法之一,是开发文献信息资源的一种常用方法,从揭示文献内容、开发信息资源来说,主要有篇目索引法和主题索引法等几种基本的方法。

发展历史

旧称通检、备检或引得。组成的基本单位是索引款目。款目一般包括索引词、说明或注释语、出处3项内容。所有索引款目实现有序化编排。其本质特征是只揭示内容出处或文献线索,并不直接提供事实、资料本身。主要功能是为人们准确、迅速地获得文献资料提供线索性指引。常见的索引主要有报刊论文资料索引、文集篇目索引、语词索引、文句索引、关键词索引、专名索引、主题索引等。

索引最早出现于西方,主要是中世纪欧洲宗教著作的索引。18世纪以后西方开始有主题索引,至19世纪末,内容分析索引被广泛使用。中原地区的索引出现较晚。一般认为,明末傅山所编的《两汉书姓名韵》是现存最早的人名索引。清代乾嘉时期,章学诚曾力倡编群书综合索引。20世纪20年代,随着西方索引理论与编制技术的传入,中国现代意义上的索引编制与研究才蓬勃展开。1930年钱亚新发表《索引和索引法》,1932年洪业发表《引得说》,标志着具有中国特色的现代索引理论、技术已迅速发展起来。20世纪50年代,计算机技术被运用于索引编制。此后,机编索引的大量出现,使索引编制理论、技术、索引载体形式发生了深刻变革。

目前SQL标准中没有涉及索引,但商用关系数据库管理系统一般都支持索引机制,只是不同的关系数据库管理系统支持的索引类型不尽相同。

索引已经成为关系数据库非常重要的部分。它们被用作包含所关心数据的表指针。通过一个索引,能从表中直接找到一个特定的记录,而不必连续顺序扫描这个表,一次一个地去查找。对于大的表,索引是必要的。没有索引,要想得到一个结果要等好几个小时、好几天,而不是几秒钟。

定义概念

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。

在数据库关系图中,可以在选定表的“索引键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。

作用

在数据库系统中建立索引主要有以下作用:

(1)快速取数据;

(2)保证数据记录的唯一性;

(3)实现表与表之间的参照完整性

(4)在使用ORDER by、基团 by子句进行数据检索时,利用索引可以减少排序和分组的时间。

优缺点

优点

1.大大加快数据的检索速度;

2.创建唯一性索引,保证数据库表中每一行数据的唯一性;

3.加速表和表之间的连接;

4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

缺点

1.索引需要占物理空间。

2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

索引类型

根据数据库的功能,可以在数据库设计器中创建四种索引:普通索引、唯一索引、主键索引和聚集索引。

普通索引

最基本的索引类型,没有唯一性之类的限制。普通索引可以通过以下几种方式创建:

创建索引,例如CREATE INDEX \u003c索引的名字\u003e ON tablename (列的列表);

修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);

创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

唯一索引

唯一索引是不允许其中任何两行具有相同索引值的索引。

当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。

对某个列建立UNIQUE索引后,插入新记录时,数据库管理系统会自动检查新纪录在该列上是否取了重复值,在CREATE TABLE 命令中的UNIQE约束将隐式创建UNIQUE索引。

创建唯一索引的几种方式:

创建索引,例如CREATE UNIQUE INDEX \u003c索引的名字\u003e ON tablename (列的列表);

修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表); ;

创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );

主键索引

简称为主索引,数据库表中一列或列组合(字段)的值唯一标识表中的每一行。该列称为表的主键。

在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

提示尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键索引。

候选索引

与主索引一样要求字段值的唯一性,并决定了处理记录的顺序。在数据库和自由表中,可以为每个表建立多个候选索引。

聚集索引

也称为聚簇索引,在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引,即如果存在聚集索引,就不能再指定CLUSTERED 关键字。

索引不是聚集索引,则表中国银行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。聚集索引更适用于对很少对基表进行增删改操作的情况。

如果在表中创建了主键约束,SQL Server将自动为其产生唯一性约束。在创建主键约束时,指定了CLUSTERED关键字或干脆没有制定该关键字,SQL Sever将会自动为表生成唯一聚集索引。

非聚集索引

也叫非簇索引,在非聚集索引中,数据库表中记录的物理顺序与索引顺序可以不相同。一个表中只能有一个聚集索引,但表中的每一列都可以有自己的非聚集索引。如果在表中创建了主键约束,SQL Server将自动为其产生唯一性约束。在创建主键约束时,如果制定CLUSTERED关键字,则将为表产生唯一聚集索引。

组织方式

索引的组织方式主要有线性索引、树型索引、散列索引和位图索引等。

在线性索引中,索引按项按索引键值排序,储存在顺序文件中。线性索引具有便于快速查找的优点和难于进行更新的缺点。

树形索引是将索引组织成树形结构。树形索引既能进行快速查找,又易于索引结构的动态调整。最典型的树形索引是B树及其变种(B+树,B* 树等)。

散列索引将索引码和其地址指针组织为一个散列文件,散列函数将索引键映射到包含该索引码记录的数据块。通常使用动态散列技术来处理数据表动态变化。散列索引处理等值查询效率较高,但不支持范围查询。

位图索引利用比特数组保存给定数据列的每一不同数值,支持将针对这一列的查询操作转换为比特数组的位运算。位图索引适合值域基数相对较小的数据列。

操纵索引

维护和使用

DBMS自动完成维护和自动选择是否使用索引以及使用哪些索引。

创建索引

SQL3没有提供建立索引的方法。但是,从事DBMS开发、销售的公司都提供他们具有这种功能的SQL工具。因为这些工具不是标准化的,它们相互不同。SQL语言使用CREATE INDEX 语句建立索引,其一般格式是:

CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED] INDEX \u003c索引名\u003e

ON \u003c表名\u003e(\u003c列名\u003e[ASC|DESC] [, \u003c列名\u003e[ASC|DESC]...])

说明:与表一样,索引也需要有唯一的名字,且基于一个表来建立,可以根据表中的一列或者多列,当列的顺序都是升序默认可不必标出,当属性列有按照降序排列的,所有属性的升序降序都不要标明。

UNIQUE——建立唯一索引。

CLUSTERED——建立聚集索引。

NONCLUSTERED——建立非聚集索引。

ASC——索引升序排序。

DESC——索引降序排序。

修改索引

对于已经建立的索引,如果需要对其重新命名,可以使用ALTER INDEX 语句。其一般格式为

Alter INDEX \u003c旧引索名字\u003e RENAME TO\u003c新引索名\u003e

删除索引

当某个时期基本表中数据更新频繁或者某个索引不再需要时,需要删除部分索引。SQL使用DROP INDEX 语句删除索引,其一般格式是:

DROP INDEX\u003c索引名\u003e

删除索引时,DBMS不仅在物理删除相关的索引数据,也会从数据字典删除有关该索引的描述。

注意事项

并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。在表较大时再建立索引,表中的数据越多,索引的优越性越明显。

可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。

如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。

确定索引的有效性:

检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。

对新索引进行试验以检查它对运行查询性能的影响。

考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。

检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。

检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: