文档库 最新最全的文档下载
当前位置:文档库 › 数据库索引研究_于绍娜

数据库索引研究_于绍娜

数据库索引研究_于绍娜
数据库索引研究_于绍娜

2010年2月第2期

电子测试

ELECTRONIC TEST

Feb.2010

No.2

数据库索引研究

于绍娜1,李霞丽1,胥桂仙1,杨智君2

(1. 中央民族大学,北京 100081;2. 中国计量科学研究院,北京 100013)

摘要:在数据库系统应用中,要进行频繁的数据查询操作。索引是与表或视图关联的磁盘上结构,有效的使用索引,可以快速找到表或视图中特定信息,减少系统的响应时间。本文介绍了索引的概念、分类、使用和维护,并就MS SQL SERVER索引进行了一些分析和实践。

关键词:聚集索引;非聚集索引;筛选索引;B树

中图分类号:TP311 文献标识码:A

Study on database index

Yu Shaona1, Li Xiali1, Xu Guixian1, Yang Zhijun2

(1. Minzu University of China, Beijing 100081;2. National Institute of Metrology P.R.China, Beijing 100013)

Abstract: In the application of database system, data query is done frequently. Index is a disk structure associating with table or view. Using index in database effectively, it’s good for finding information fast in the table or view and reducing system’s answering time. In this paper, we introduce classify, using and maintenance of index. In addition, we analysis and practice the index in MS SQL SERVER.

Keywords: clustered index;nonclustered index;Filtered Indexes;B tree

0 引言

索引中保存着表或视图中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置。通过索引查询,可以减少为返回查询结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。创建设计良好的索引以支持查询,可以显著提高数据库查询和应用程序的性能。但是,索引并不总是提高系统的性能,表中建有大量索引会影响增、删、改语句的性能,因为当表中的数据更改时,所有索引都须进行适当的调整。因此,合理的设计索引对于提高数据库的性能具有重要意义。

1 索引的概念

索引包含由表或视图中的一列或多列生成的键。键存储在一个B树结构中,使SQL Server可以快速有效地查找与键值关联的行。

MS SQL SERVER中数据存储的基本单位是页(Page),磁盘I/O操作在页级执行。SQL Server 数据页和索引页都是8K字节大。这意味着与8KB数据页相比,索引页可以有效地将与更多行相关的信息压缩到一个8KB页。当SQL查询要求某个表中

的一个行集,这些行的某些值与查询中的列相匹配,SQL Server可以节省I/O操作和时间,因为可以只读取索引页来查找这些值,然后只访问表中满足查询的所需行,而无须执行I/O操作以扫描表中所有行来找到所需行。

MS SQL SERVER提供了2种索引:聚集索引和非聚集索引。二者的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。非聚集索引具有独立于数据行的结构,包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。

聚集索引和非聚集索引均建立在由8KB索引页所组成的B树结构上。它们的不同在于B树结构的底部,其底部在SQL Server文档中称为叶级,索引B树结构的上半部分称为非叶级索引。在聚集索引中,索引树的叶级页包含实际的数据:记录的索引顺序与物理顺序相同。在非聚集索引中,叶级页指向表中的记录:记录的物理顺序与逻辑顺序没有必然的联系。

聚簇索引类似汉语字典的拼音音节目录表,目录表的顺序与实际的页码顺序是一致的。非聚簇索引则类似汉语字典笔画检字表,笔画检字表中的顺序通常与实际的页码顺序是不一致的。由此可以理解每个表只能有一个聚集索引,因为拼音音节目录表只能按照一种方法进行排序。但可以有多个非聚集索引,因为可能按笔画检索,也可能按部首检索。

图1给出了非聚集索引和聚集索引在结构上的不同。两种索引的所有关键字都出现在叶子结点中,并且是有序的,非叶子结点相当于是叶子结点的索引。聚集索引的叶级结点是数据页,在数据页中数据按照索引顺序存储;非聚集索引的叶级结点,不是数据,而是指向数据页(聚集索引的叶级结点或者堆)的页,叶节点页的次序和表的物理存储次序可能不同。

2 索引的使用

聚集索引,索引的叶级节点是表的实际数据行,通过聚集索引来检索SQL数据时不需要指针跳动就可以获得相关的数据页。

聚簇索引适用于具有下列属性的列:主键及外

图1 聚集索引和非聚集索引B树结构

键列;经常使用的查询列;查询列中包含ORDER BY或GROUP BY子句。因为聚集索引已经按顺序排序,查询中不必再排序;不经常修改的列;在连接操作中使用的列;要求返回许多行的查询,因为索引的叶级节点是表的实际数据行,读索引已经把表里的数据全部读到;使用运算符(如BETWEEN、>、>=、<和<=)返回一个区间的值。例如,在“学生表”中“学号”列上建聚集索引,能根据学号快速检索到起始学号所在的行,然后检索此行后所有连续的行,直到检索到终止学号所在的行。

聚集索引不适用于具有下列属性的列:(1)经常修改的列,因为值修改后,索引需要重新排序,增加了维护开销。(2)索引列包含若干列或若干大型列的组合。因为非聚集索引项包含聚集索引键列,同时也包含为此非聚集索引定义的键列,聚集索引数据长度增大,同一表中的非聚集索引也将随之增大。

在非聚集索引中,叶级节点仅包含组成该索引的列中的所有数据以及快速找到相关数据页上其它数据的指针。当用非聚集索引检索表中与键值匹配的信息时,将搜索整个索引B树,直到在索引叶级找到一个与键值匹配的值。如果需要的列不是组成索引的一部分,则会发生指针跳动,跳到所指向的聚集索引的叶级结点或者堆中。

非聚簇索引适用于具有下列属性的列:(1)主键及外键列。(2)在连接操作中使用的列。(3)查询列中包含GROUP BY或order by 子句。(4)常用于集合函数(如AVG,....)的列,因为可以直接通过索引键值计算需要的结果,不必访问数据块。(5)不返回大型结果集的查询。

非聚集索引由于B树的节点不是具体数据页,有时候可能导致非聚集索引甚至不如扫描表快。但如果要查询的内容,在非聚集索引中被覆盖了,则

不需要继续到聚集索引中寻找数据了,这时候可以创建覆盖索引,使索引项中包含查寻所需要的全部信息。如果非聚簇索引中包含结果数据,那么它的查询速度将快于聚簇索引。但由于覆盖索引的索引项比较多,要占用比较大的空间,更新操作会引起索引值改变。所以如果潜在的覆盖查询并不常用或不太关键,则覆盖索引的增加反而会降低性能。

另外,SQL Server 2008增加了筛选索引这一新特性,它使我们可以向索引增加WHERE子句,这样就可以将索引聚焦到被选中的行上,信息更加准确,提高了查询性能。对表更新时,仅在对索引中的数据产生影响时才进行维护,减少了索引维护开销。,创建筛选索引还可以减少非聚集索引的磁盘存储开销。

3 索引使用的误区

通过索引,可以加快数据的查询速度和减少系统的响应时间;可以使表和表之间的连接速度加快。但是,不是在任何时候使用索引都能够达到这种效果。若在不恰当的场合下,使用索引反而会事与愿违。下面谈一下索引使用的误区。

(1) 索引多多益善

索引的优点有目共睹,但创建索引和维护索引都需要花费时间与精力。索引是数据库中实际存在的对象,占用一定的物理空间。若索引多了,不但会占用大量的物理空间,而且也会影响到整个数据库的运行性能。

有些列其数据类型较特殊,如文本类型(TXT)、图像类型(IMAGE)等,如果表中的列属于这些数据类型,则最好不要为其建立索引。这些字段长度不确定,一般是空字符串或者长字符串。若这些列上建立索引,要占用空间和维护困难,反

而会降低数据库的整体性能。

(2) 只要建立索引就能显著提高查询速度

在“教材调查表”中“是否为新书”列取值只有“0”和“1”,在“是否为新书”列上添加索引就不会显著的增加查询速度。相反,因为需要占用空间,反而会降低数据库的整体性能。教材调查表中共有20万条记录,列“是否为新书”取值为“1”的记录共17万条,在“是否为新书”列上不创建索引和创建非聚集索引查询的速度为:

(a)在“是否为新书”列上不创建任何索引:

select * from dbo.jiaocai where sfxs='1' 用时:13374 ms

(b)在“是否为新书”列上创建非聚集索引:

select * from dbo.jiaocai where sfxs='1' 用时:13234 ms

通过例子可以发现,并非在任何字段上简单地建立索引就能提高查询速度。因为此查询返回大量结果集,不仅要读索引页,还要读大部分数据页,所以性能无显著提高。

(3) 采用MS SQL SERVER默认的聚集索引

“教材调查表”的ID列为主键,设置为自动增长,步长为1,MS SQL SERVER默认在主键上建立聚集索引,那么数据将按照ID列的值进行排序。但实际上很少根据这个列值对表进行操作,所以表中唯一的聚集索引并不能起到其作用。

4 索引的维护

底层表的数据在添加、更新、删除操作中会产生索引碎片,导致查询速度变慢,需要对某些重要的表进行定期索引扫描并针对合符要求的索引进行重新组织或重新生成工作。一般碎片>5%并且<=30%时,使用重新组织的方法速度比索引重建快;碎片>30%时,索引重建的速度比重新组织要快。

整理索引碎片的方法如下:

(1)重新组织索引

索引碎片不太多时,可以重新组织索引。重新组织索引是通过对叶页进行物理重新排序,使其与叶节点的逻辑顺序相匹配,从而对表或视图的聚集索引和非聚集索引的叶级别进行碎片整理。重新组织还会压缩索引页。采用ALTER INDEX ...... REORGANIZE语句重组索引。

(2) 重新生成索引

重新生成索引将会删除并重新创建索引。这将根据指定的或现有的填充因子设置压缩页来删除碎片、回收磁盘空间,然后对连续页中的索引行重新排序。这样可以减少获取所请求数据所需的页读取数,从而提高磁盘性能。采用ALTER INDEX ...... REBUILD语句重新生成索引。

(3) DROP INDEX 语句删除索引,然后使用一个单独的CREATE INDEX 语句重新创建该索引。通过这种方式重新生成索引,索引将彻底重建。但是这此会阻塞所有的查询,最好是在索引碎片十分严重,并且使用REBUILD无法达到效果的情况下使用。

5 结束语

索引就好像一把双刃剑,即可以提高数据库的性能,也可能对数据库的性能起到反面作用。要建立一个好的索引体系,特别是对聚合索引的创建,更应精益求精,以使数据库能得到高性能的发挥。

参考文献

[1] 翟羽佳. 一体化网络下移动性管理的索引结构模型

(下转91页)

(上接87页)

[J]. 电子学报,2009(4):36-42.

[2] 马亚明等. 空间索引与多尺度表达的一体化模型

研究[J]. 武汉大学学报:信息科学 版,2008(12):

1237-1241.

[3] 王磊. 索引在查询优化中的作用[J]. 长春理工大学学

报,2009(2):181-182.

[4] 姚徐等. 多级索引的藏语分词词典设计[J]. 计算机应

用,2009(S1):185-187.

[5] 张庆扬等. 使用二级索引的中文分词词典[J]. 计算机

工程与应用,2009(19):143-145.[6] 应俊等. 一种基于多重索引的大规模数据快速查找

算法[J]. 计算机科学,2009(3):264-266.

[7] 王珊,萨师宣. 数据库系统概论[M].4版. 北京:高

等教育出版社,2007.

[8] 严蔚敏,吴伟民. 数据结构(C语言版) [M]. 北京:

清华大学出版社,2004.

作者简介:于绍娜,讲师,主要研究方向为数据库、分布式计算。E-mail:yusncun@https://www.wendangku.net/doc/f613786169.html,

线引入的干扰而在测量端及示波器端接入不同的R、C元件。

有时候,有些行业考虑到行业特点,对电源制定了专门的标准,并规定了具体的测量方法,这时候就得按照标准规定的方法来进行测量。

4 结论

在实际工作中,如果对直流电源或测量没有专门的要求或相应的标准,就可采用本文介绍的测量纹波和噪声的常规方法。在测量之前,一定要清楚对被测电源有没有特殊要求,应用行业有没有特殊性或相关标准;如果是直流电源制造商,最好能和客户沟通并得到认可,这样的测量结果才能被各相关方都接受。

参考文献

[1] GB/T 14714-2008微小型计算机系统设备用开关电

源通用规范[S].

[2] GB/T 17478-2004低压直流电源设备的性能特性[S].

[3] JJG (航天)6-1999.直流稳定电源检定规程.

[4] 俞江洁. LED驱动器输出纹波和噪声的测量方法[J].

电子质量,2009(8):19-19.

[5] 吴腾奇. 示波器测量指导(上)[J]. 电子测

试,2007(9):86-89.

[6] 吴腾奇. 示波器测量指导(下)[J]. 电子测

试,2007(10):86-90.

[7] 韩晶. 开关电源测试实例[J]. 电子测试,2007(12):81-83.

[8] 常山. 常用电源技术标准概述[J]. 电子测

试,2007(12):29.

[9] 徐焕蓉. 直流稳压电源的纹波测量问题[J]. 计测技

术,2008(5):67-69.

作者简介:同金,,测试工程师,

大学本科。多年来在西门子信号有限公

司一直从事产品的质量检验和测试工

作。E-mail:jin.tong@https://www.wendangku.net/doc/f613786169.html,

数据库系统概论课程教学大纲.

《数据库系统概论》课程教学大纲 课程英文名称:Theory & Application Of DataBase System 课程编号: 讲授对象:计算机网络工程专业(本科) 先修课程:《离散数学》、《FoxPro》、《数据结构》、《操作系统》 采用教材:《数据库系统概论》萨师煊等,高等教育出版社 总学时:72 授课:64 上机:8 学分:4 一、课程的性质、目标和任务: 《数据库系统原理及应用》是数据管理的最新技术,是计算机科学的重要分支,它为计算机专业、管理专业等众多学科提供利用计算机技术进行数据管理的基本理论知识,是计算机专业、管理专业等学科的专业必修课。 本课程主要介绍数据库的基本理论和应用方法。本课程的任务是通过各个教学环节,运用各种教学手段和方法,使学生在掌握数据模型、数据库管理系统、数据库语言及数据库设计理论等基本理论知识的基础上,逐步具有开发和设计数据库的能力,为进一步开发和设计大型信息系统打下坚实基础。 二、课程教学内容、教学形式和教学要求 1、理论教学大纲内容: 第一章绪论 (一)课程内容 1、数据库系统概述 2 、数据模型 3 、数据库系统结构 4 、数据库管理系统 5 、据库技术的研究领域 (二)学习目的和要求 本章阐述了数据库的基本概念,介绍了数据库管理技术的进展情况、数据库技术产生和发展的背景、数据库系统的组成以及数据库技术的主要研究领域。 学习本章的重点在于将注意力放在基本概念和基本知识的把握方面,从而为以后的学习打好扎实的基础。 第二章关系数据库 (一)课程内容 1 、关系模型 2 、关系数据结构 3 、关系的完整性 4、关系代数 (二)学习目的和要求 1、需要了解的:产系统数据库理论产生和发展的过程,关系数据库产品的发展 沿革;关系演算的概念; 2、需要牢固掌握的:关系模型的三个组成部分及各部分所包括的主要内容;牢 固关系数据结构及其形化定义;关系的三类完整性约束的概念。

数据库索引

索引的是一种功能 索引是个既稳定又开放的信息结构,它有十一种功能。 1 分解功能 把文献中的资料单元(如篇名、机构、短语、概念、物名、地名、书名、人名、字词、符号等)一一分解,这就是索引的分解功能。它是索引工作的起跑线和索引编纂的基础,没有对文献内容的这种分解功能,就没有索引。 过去有些反对索引的人说,索引是把古人的著书“凌迟碎割”。他们对索引法的反对,实出于对流传已久的那种落后的皓首穷经的陋习的偏爱和对新的治学方法的无知,洪业曾鄙视他们为卧于涸辙的鲋鱼,以升斗之水济命,而不知西江水之可羡。虽然如此,但他们所谓的索引是把古人著书“凌迟碎割”的形象说法,却从反面十分正确地道破了索引的分解功能。 分解功能是索引作用于文献的特殊功能,是它和其他检索工作不同之处。 2 梳理功能 每种文献都包容着许多不同性质的资料单元,它们在文献中基本呈无序的状态。把这些无序状态的资料单元按外表特征或内容性质进行各归其类的整理,这就是索引的梳理功能。章学诚早就发现了这种功能,他在给《族孙守一论史表》信中要求其在治二十四史年表时一并把廿二史列传中的人名编成索引,两者互为经纬,这样便可使考古之士,于纷如乱丝之资料中,忽得梳通栉理。 梳理功能是索引分解的后继。如果只有分解功能而没有梳理的功能,那么分解功能就没有价值。 梳理是对资料单元的初分。如是字序,只要按笔划或音序归类即可;如是类序只要按大类归纳即可。就像小姑娘梳头,先把长发梳顺,而编什么辫子或梳什么发型则是下一步的要求了。 3 组合功能 把梳理后的资料单元按照分类的要求,严密地组织它们的类别层次以及类目下的专题和同类目下款目的序列关系;或按字序的要求,严密地把标目的结构正装或倒装、考虑限定词对标目的限定和修饰的级数、或考虑字序和类序相结合的可能。此外,不论是类序或字序都要考虑参照系统的建立方案,使相关款目形成网络,使用户检索的眼界得以拓宽。这些,都是索引的组合功能。 过去,国外的同行曾把圣经的页边索引以“串珠”命名;我国有人曾把本草的方剂编成索引,以“针线”命名,“串珠”和“针线”是索引组合功能很形象的描绘。它使文献资料单元成为一串串的明珠,成为被针线贯穿起来的资料单元的珍品。 4 结网功能 对某个领域的文献进行有计划的索引编纂,利用类型的结构从各种不同的角度和层次对这些文献的内容进行纵横交错和多维的揭示和组合,使之形成一个检索这些文献中的各种不同性质的资料单元的网络。这就是索引的结网功能。 由“主表”和“词族索引”、“范畴索引”、“英汉对照索引”等所组成的《汉语主题词表》是由几种不同性质的索引构建的一个主题词间的联系、辨析主题词词义和被标引的文献主题概念是否精确的一个隐含的语义网络,它对文献中的资料单元产生族性检索和扩大检索途径的作用。这个网络的结构和作用就是运用索引结网功能的一个范例。

数据库索引的优缺点及使用时的注意事项

本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它 们包含着对数据表里所有记录的引用指针。 注:[1]索引不是万能的!索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL 在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE 选项的作用将非常明显。[2]另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。 从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 1. InnoDB数据表的索引 与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。"数据行级锁定"的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT...LOCK IN SHARE MODE、SELECT...FOR UPDATE命令以及INSERT、UPDATE和DELETE命令。 出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。 2. 限制 如果WEHERE子句的查询条件里有不等号(WHERE coloum != ...),MySQL将无法使用索引。 类似地,如果WHERE子句的查询条件里使用了函数(WHERE DAY(column) = ...),MySQL也将无法使用索引。 在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数 据类型相同时才能使用索引。

分布式数据库的索引技术研究

分布式数据库的索引技术研究 摘要:索引是分布式数据库中的一个重要对象。通过对分布式数据库中的索引管理技术的分析,论述了分布式数据库中索引的概念、特点、分类及使用原则等。分析了分布式数据库设计中的统一索引服务。在文章的最后部分给出了创建合理索引的一些建议。 关键词:分布式数据库索引检索 1索引的概念 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标志这些值的数据页的逻辑指针清单。表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。 2索引的创建 2.1 索引的创建 创建索引有多种方法,这些方法包括直接创建索引的方法和间接创建索引的方法。直接创建索引,例如使用CREATE INDEX语句或者使用创建索引向导,间接创建索引,例如在表中定义主键约束或者唯一性键约束时,同时也创建了索引。虽然,这两种方法都可以创建索引,但是,它们创建索引的具体内容是有区别的。 使用CREATE INDEX语句或者使用创建索引向导来创建索引,这是最基本的索引创建方式,并且可以定制创建出符合自己需要的索引。在使用这种方式创建索引时,可以使用许多选项,例如指定数据页的充满度、进行排序、整理统计信息等,这样可以优化索引。使用这种方法,可以指定索引的类型、唯一性和复合性,也就是说,既可以创建聚簇索引,也可以创建非聚簇索引,既可以在一个列上创建索引,也可以在两个或者两个以上的列上创建索引。 通过定义主键约束或者唯一性键约束,也可以间接创建索引。主键约束是一种保持数据完整性的逻辑,它限制表中的记录有相同的主键记录。在创建主键约束时,系统自动创建了一个唯一性的聚簇索引。虽然,在逻辑上,主键约束是一种重要的结构,但是,在物理结构上与主键约束相对应的结构是唯一性的聚簇索引。换句话说,在物理实现上,不存在主键约束,而只存在唯一性的聚簇索引。同样,在创建唯一性键约束时,也同时创建了索引,这种索引则是唯一性的非聚簇索引。因此当使用约束创建索引时,索引的类型和特征基本上都已经确定了,由用户定制的余地比较小。 3分布式数据库设计中的统一索引服务

oracle数据库索引的理解与总结

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 例如这样一个查询:SELECT * FROM TABLE1 WHERE ID = 44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。 建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。 虽然建立索引能加快对表中记录的查询或者排序速度,但是并不是索引建得越多越好,这就需要我们了解使用索引过程中,索引的一些优点以及缺陷: 使用索引的好处: 创建索引可以大大提高系统的性能: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。使用索引的一些不足: 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引: ?在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; ?在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; ?在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; ?在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; ?在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点: ?对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 ?对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了

mysql数据库索引优化

我们首先讨论索引,因为它是加快查询的最重要的工具。还有其他加快查询的[url=javascript:;]技术[/url],但是最有效的莫过于恰当地使用索引了。在MySQL 的邮件清单上,人们通常询问关于使查询更快的问题。在大量的案例中,都是因为表上没有索引,一般只要加上索引就可以立即解决问题。但这样也并非总是有效,因为优化并非总是那样简单。然而,如果不使用索引,在许多情形下,用其他手段改善性能只会是浪费时间。应该首先考虑使用索引取得最大的性能改善,然后再寻求其他可能有帮助的技术。 本节介绍索引是什么、它怎样改善查询性能、索引在什么情况下可能会降低性能,以及怎样为表选择索引。下一节,我们将讨论MySQL 的查询优化程序。除了知道怎样创建索引外,了解一些优化程序的知识也是有好处的,因为这样可以更好地利用所创建的索引。某些编写查询的方法实际上会妨碍索引的效果,应该避免这种情况出现。(虽然并非总会这样。有时也会希望忽略优化程序的作用。我们也将介绍这些情况。) 索引对单个表查询的影响 索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000 行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。 例如对下面这样的一个student表: mysql>SELECT * FROM student +------+---------+---------+---------+---------+ | id | name | english | chinese | history | +------+---------+---------+---------+---------+ | 12 | Tom | 66 | 93 | 67 | | 56 | Paul | 78 | 52 | 75 | | 10 | Marry | 54 | 89 | 74 | | 4 | Tina | 99 | 83 | 48 | | 39 | William | 43 | 96 | 52 | | 74 | Stone | 42 | 40 | 61 | | 86 | Smith | 49 | 85 | 78 | | 37 | Black | 49 | 63 | 47 | | 89 | White | 94 | 31 | 52 | +------+---------+---------+---------+---------+ 这样,我们试图对它进行一个特定查询时,就不得不做一个全表的扫描,速度很慢。例如,我们查找出所有english成绩不及格的学生: mysql>SELECT name,english FROM student WHERE english<60; +---------+---------+ | name | english | +---------+---------+ | Marry | 54 | | William | 43 | | Stone | 42 | | Smith | 49 |

数据库索引概论及详解

记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. 使用索引,在一般情况下,将能明显提高查询的性能,但系统为维护索引,也必将增加许多额外的开销。所以,何时应建立索引,查询时是否使用索引,对系统性能的影响将是非常大的。在这里,我想对这个问题谈一下自己的认识。 首先,在下列情况下,不适合建立索引: 1、表的规模不大,在这种情况下,直接查找表的开销比搜索索引 再定位的开销要小。 2、表被频繁更新,在这种情况下,维护索引的开销要大于使用索 引所带来的性能提高。 3、表上已经建立了许多索引。 4、用户的查询方式经常发生变化。 上述这些情况都是比较直观的,但是,即使建立了索引,在具体查 询时,系统也未必会使用该索引。 不管是何种数据库系统,其查询优化过程由两个层次构成:代数优 化(或称基于规则的优化)和物理优化(或称基于代价的优化)(部分 数据库系统可能不含物理优化过程)。 代数优化是使用一组预定义的规则来对查询进行优化,在这种优化 方式下,如果表上建有索引,系统将使用该索引。 物理优化是在代数优化的基础上,根据物理统计信息,来估计各种 执行方案的执行代价,从中选取一种最优(代价最小)的执行方案。在 这种优化方式下,如果表上建有索引,是否使用索引,将取决于查询的 “选中度”(selectivity)。 什么是选中度?举个例子,假设表中有一名为“年龄”的字段,有 一查询需要查出该表中所有“年龄”不超过50岁的记录,如果表中有70% 的记录满足这一条件,则称该查询的选中度为70。 当选中度超过某一预先给定的值P(P的大小取决于系统的具体实现) 时,遍历整个表的开销比搜索索引再定位的开销要小,此时系统将不使 用索引。 通过统计字段的值分布,可以估计查询的选中度,如果它大于P,系 统将不使用索引,直接遍历表。这是一种非常重要的统计信息,它还可 用于估计连接操作结果集的大小。 当然,当查询比较固定时,用户也可以根据自己对应用的理解预先估

sql索引类型

sql索引类型 唯一索引:唯一索引不允许两行具有相同的索引值 主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个 优点 加快访问速度 加强行的唯一性 缺点 带索引的表在数据库中需要更多的存储空间 操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新 请按照下列标准选择建立索引的列。 该列用于频繁搜索 该列用于对数据进行排序 一、索引的概念 索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。 二、索引的特点 1.索引可以加快数据库的检索速度 2.索引降低了数据库插入、修改、删除等维护任务的速度 3.索引创建在表上,不能创建在视图上 4.索引既可以直接创建,也可以间接创建 5.可以在优化隐藏中,使用索引 6.使用查询处理器执行SQL语句,在一个表上,一次只能使用一个索引 7.其他

三、索引的优点 1.创建唯一性索引,保证数据库表中每一行数据的唯一性 2.大大加快数据的检索速度,这也是创建索引的最主要的原因 3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。 四、索引的缺点 1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加 2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大 3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度 五、索引分类 1.直接创建索引和间接创建索引 直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn) 间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引 2.普通索引和唯一性索引 普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn) 唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用 CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn) 3.单个索引和复合索引 单个索引:即非复合索引 复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段 CREATE INDEX name_index ON username(firstname,lastname) 4.聚簇索引和非聚簇索引(聚集索引,群集索引) 聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列 CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW(允许有重复记录的聚簇索引) 非聚簇索引:CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) 六、索引的使用

数据库索引的作用

为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引,例如: 在经常需要搜索的列上,可以加快搜索的速度; 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点: 第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

数据库索引的作用及实例(精)

1. 1.索引作用 2. 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术, 能够大大提高查询效率。特别是当数据量非常大, 查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。 3. 4. 例如,有 3个未索引的表 t1、 t2、 t3,分别只包含列 c1、 c2、 c3,每个表分别含有 1000行数据组成,指为 1~1000的数值,查找对应值相等行的查询如下所示。 5. 6. SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3 7. 8. 此查询结果应该为 1000行, 每行包含 3个相等的值。在无索引的情况下处理此查询, 必须寻找 3个表所有的组合, 以便得出与 WHERE 子句相配的那些行。而可能的组合数目为 1000×1000×1000(十亿,显然查询将会非常慢。 9. 10. 如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询处理如下。 11. 12. (1从表 t1中选择第一行,查看此行所包含的数据。 13. 14. (2使用表 t2上的索引,直接定位 t2中与 t1的值匹配的行。类似,利用表 t3上的索引,直接定位 t3中与来自 t1的值匹配的行。

15. 16. (3 扫描表 t1的下一行并重复前面的过程, 直到遍历 t1中所有的行。 17. 18. 在此情形下,仍然对表 t1执行了一个完全扫描,但能够在表 t2和 t3上进行索引查找直接取出这些表中的行, 比未用索引时要快一百万倍。 19. 20. 利用索引, MySQL 加速了 WHERE 子句满足条件行的搜索,而在多表连接查询时,在执行连接时加快了与其他表中的行匹配的速度。 21. 22.2. 创建索引 23. 在执行 CREATE TABLE语句时可以创建索引, 也可以单独用 CREATE INDEX或 ALTER TABLE来为表增加索引。 24. 25.1. ALTER TABLE 26.ALTER TABLE用来创建普通索引、 UNIQUE 索引或 PRIMARY KEY索引。 27. 28. 29. 30.ALTER TABLE table_name ADD INDEX index_name (column_list 31. 32.ALTER TABLE table_name ADD UNIQUE (column_list 34.ALTER TABLE table_name ADD PRIMARY KEY (column_list 35.

数据库系统综合概论

第一章数据库系统概论 本章目的在于使读者对数据库系统的基本知识能有一个较为全面的了解,为今后的学习和工作打下基础。本章重点介绍了有关数据库结构和数据库系统组织的基本知识和基本概念,以及常见的三种类型的数据库系统的特点。重点介绍关系数据库的有关知识。 1.1 数据管理技术发展史 随着生产力的不断发展,社会的不断进步,人类对信息的依赖程度也在不断地增加。数据作为表达信息的一种量化符号,正在成为人们处理信息时重要的操作对象。所谓数据处理就是对数据的收集、整理、存储、分类、排序、检索、维护、加工、统计和传输等一系列工作全部过程的概述。数据处理的目的就是使我们能够从浩瀚的信息数据海洋中,提取出有用的数据信息,作为我们工作、生活等各方面的决策依据。数据管理则是指对数据的组织、编码、分类、存储、检索和维护,它是数据处理的一个重要内容中心。数据处理工作由来以久,早在1880 年美国进行人口普查统计时,就已采用穿孔卡片来存储人口普查数据,并采用机械设备来完成对这些普查数据所进行的处理工作。电子计算机的出现以及其后其硬件、软件的迅速发展,加之数据库理论和技术的发展,为数据管理进入一个革命性阶段提供有力的支持。根据数据和应用程序相互依赖关系、数据共享以及数据的操作方式,数据管理的发展可以分为三个具有代表性的阶段,即人工管理阶段、文件管理阶段和数据库管理阶段。 【1 】人工管理阶段 这一阶段发生于六十年代以前,由于当时计算机硬件和软件发展才刚刚起步,数据管理中全部工作,都必须要由应用程序员自己设计程序完成去完成。由于需要与计算机硬件以及

各外部存储设备和输入输出设备直接打交道,程序员们常常需要编制大量重复的数据管理基 本程序。数据的逻辑组织与它的物理组织基本上是相同的,因此当数据的逻辑组织、物理组织或存储设备发生变化时,进行数据管理工作的许多应用程序就必须要进行重新编制。这样就给数据管理的维护工作带来许多困难。并且由于一组数据常常只对应于一种应用程序,因此很难实现多个不同应用程序间的数据资源共享。存在着大量重复数据,信息资源浪费严重。【2 】文件管理阶段 这一阶段发生于六十年代,由于当时计算机硬件的发展,以及系统软件尤其是文件系统的出现和发展,人们开始利用文件系统来帮助完成数据管理工作,具体讲就是:数据以多种组织结构(如顺序文件组织、索引文件文件组织和直接存取文件组织等)的文件形式保存在外部存储设备上,用户通过文件系统而无需直接与外部设备打交道,以此来完成数据的修改、插入、删除、检索等管理操作;使用这种管理方式,不仅减轻进行数据管理的应用程序工作量,更重要地是,当数据的物理组织或存储设备发生变化时,数据的逻辑组织可以不受任何影响,从而保证了基于数据逻辑组织所编制的应用程序也可以不受硬件设备变化的影响。这样就使得程序和数据之间具有了一定的相互独立性。 但由于数据文件的逻辑结构完全是根据应用程序的具体要求而设计,它的管理与维护完全是由应用程序本身来完成,因此数据文件的逻辑结构与应用程序密切相关,当数据的逻辑结构需要修改时,应用程序也就不可避免地需要进行修改;同样当应用程序需要进行变动时,常常又会要求数据的逻辑结构进行相应的变动。在这种情况下,数据管理中的维护工作量也是较大的。更主要的是由于采用文件的形式来进行数据管理工作,常常需要将一个完整的、相互关联的数据集合,人为地分割成若干相互独立的文件,以便通过基于文件系统的编程来实现来对它们的管理操作。这样做同样会导致数据的过多冗余和增加数据维护工作的复杂性。例如人事部门、教务部门和医务部门对学生数据信息的管理,这三个部门中有许多数据是相同的,如姓名、年龄、性别等,由于是各部门均是根据自己的要求,建立各自的数据文件和应用程序,这样不仅造成了大量的相同数据重复存储,而且在修改时,常常需要同时修改三个文件中的数据项,如修改学生年龄,此外若需要增加一个描述学生的数据项,如通讯地址,那么所有的应用程序就必须都要进行相应的修改。除此之外,采用文件系统来帮助进行数据管理工作,在数据的安全和保密等方面,也难以采取有效的措施加以控制。 3 】数据库管理阶段 1在不断改进和完善文件系统的过程中,从六十年代后期开始,人们逐步研究和发展了以数据的统一管理和数据共享为主要特征的数据库系统。即在数据在统一控制之下,为尽可能多的应用和用户服务,数据库中的数据组织结构与数据库的应用程序相互间有较大的相对独立性等。与以往前数据管理方法和技术相比,利用数

数据库建立索引的原则

数据库建立索引的原则 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如employee 表的姓(lname)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。 在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。 建立索引的优点 1.大大加快数据的检索速度; 2.创建唯一性索引,保证数据库表中每一行数据的唯一性; 3.加速表和表之间的连接; 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。 索引的缺点 1.索引需要占物理空间。 2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。 根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。有关数据库所支持的索引功能的详细信息,请参见数据库文档。 提示尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。有关这些约束的更多信息,请参见主键约束和唯一约束。 唯一索引

唯一索引是不允许其中任何两行具有相同索引值的索引。 当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee 表中职员的姓(lname) 上创建了唯一索引,则任何两个员工都不能同姓。 有关唯一索引的更多信息,请参见创建唯一索引。 主键索引 数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。有关主键的更多信息,请参见定义主键。 聚集索引 在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。 一、索引 1. 概念:索引是揭示文献内容出处,提供文献查考线索的工具书。 2. 类型:种类很多,从不同的角度可以划分出不同的类型。按文种分,可以分为中文索引的外文索引;按收录范围分,可以分为综合性索引和专题性索引;按收录文献的时间分,可以分为近期索引和回溯性索引;按索引款目的标目分,可以分为题名索引、著者索引、语词索引、主题索引、分类索引等。 3. 功能:揭示文献的内容和指引读者查找信息 4. 作用:索引揭示了一书、一刊的基本情况,如篇目、文句。可以深入、完整、详细、系统地为读者提所需文献的具体线索。 铁律一:天下没有免费的午餐,使用索引是需要付出代价的。 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了。

SQL 索引详解

SQL 索引详解 什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。 同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度。 ? SQL Server中的数据也是按页( 4KB )存放 ?索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据。 ?索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。 ?索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。 索引类型 ?唯一索引:唯一索引不允许两行具有相同的索引值 ?主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。 主键索引要求主键中的每个值是唯一的,并且不能为空 ?聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个 ?非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个 索引类型:再次用汉语字典打比方,希望大家能够明白聚集索引和非聚集索引这两个概念。 唯一索引: 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在stuInfo表中的学员员身份证号(stuID) 列上创建了唯一索引,则所有学员的身份证号不能重复。 提示:创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。 主键索引: 在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。

浅谈B-树以及数据库聚集索引、非聚集索引

浅谈B-树以及数据库聚集索引、非聚集索引 对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?这段时间,了解数据库索引的一些相关知识,又查阅了一些相关资料,希望本文对大家有一定的帮助,在此借此机会与 大家分享一些数据库聚集索引、数据库非聚集索引概念、实现过程、以及优缺点。有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步。 我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MySql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。所以在 最开始,简单地介绍一下B-Tree。 1.B-Tree 在严蔚敏编著的《数据结构》种对B-Tree有如下定义: B-Tree是一种平衡的多路查找树,它在文件系统中很有用,一棵m阶的 B-树,或为空树,或为满足下列特性的m叉树: 1)树中每个结点至多有m个孩子; 2)若根节点不是叶子节点,则至少有两棵子树; 3)除根结点和叶结点外,其它每个结点至少有m/2(上取整)个孩子; 4)所有叶结点在同一层,叶结点不包含任何关键字信息; 5)有K个关键字的非叶结点恰好包含K+1个孩子 另外,对于一个结点,其内部的关键字是从小到大排序的。以下是B-Tree (m=4)的样例:

对于每个结点,主要包含一个关键字数组key[],一个指针数组(指向儿子)son[]。在B-Tree内,查找的流程是:使用顺序查找(数组长度较短时)或折 半查找方法查找key[]数组,若找到关键字k,则返回该结点的地址及K在key[]中的位置;否则,可确定k在某个key[i]和key[i+1]之间,则从son[i]所指的子结点继续查找,直到在某结点中查找成功;或直至找到叶结点且叶结点中的查 找仍不成功时,查找过程失败。 接着,我们使用以下图片演示如何生成B-Tree(m=4,依次插入1~6):从图可见,当我们插入关键字4时,由于原结点已经满了,故进行分裂,基本 按一半的原则进行分裂,然后取出中间的关键字2,升级(这里是成为根结点)。其它的依类推,就是这样一个大概的过程。

索引及其应用解析

第6章索引及其应用 教学目标 通过本章学习,使学生掌握索引的基本概念、分类和作用,掌握索引的建立和操作方法,掌握索引的维护方法,会根据实际问题的需要,能够 熟练地建立表和视图的相关索引。 教学要求 知识要点能力要求关联知识 索引概念、分类 和作用 (1)掌握索引的基本概念、分类和作用索引概念、分类和作用 索引的建立和操作(1)掌握索引的建立方法 (2)掌握索引的操作方法 SQL Server Management Studio建立和操作索引, CREATE INDEX等SQL命 令 索引的维护(1)掌握维护索引的常用方法DBCC SHOWCONTIG和DBCC INDEXDEFRAG 命令 索引视图(1)掌握索引视图的建立和应用方法CREATE VIEW,CREATE INDEX等SQL命令 重点难点 索引的概念、分类和作用 索引的建立和操作方法 索引视图的建立与应用

6.1任务描述 本章完成项目的第6个任务:在大学生选课管理数据库Student中,完成如下操作: 1.为课程信息表创建一个非聚集复合索引。 2.为教师教课信息表创建一个聚集复合索引。 3.为学生选课信息表创建一个唯一、聚集复合索引。 6.2索引综述 数据库中的索引可以快速找到表或索引视图中的特定信息。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建、设计良好的索引以支持查询,可以显著提高数据库查询和用应程序的性能。索引可以减少为返回查询结果集而必须读取的数据量。索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。 1.索引的概念 数据库中的索引与书籍中的索引(目录)类似,在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。也可以这么说,数据库中某个表的索引是指,将这个表中数据行按照某一列或者若干列值的组合(称为索引键)的大小,只排列各个数据行的顺序,而不改变数据行的存储位置,得到的一个非结构数据文件。 2.索引的作用 ●通过创建唯一索引,可以保证数据记录的唯一性。 ●通过创建和使用索引可以大大加快数据检索的速度。 ●通过创建和使用索引可以加速表与表之间的连接,这一点在实现数据的参 照完整性方面有特别的意义。 ●通过创建和使用索引使得在使用ORDER BY和GROUP BY子句中进行检索数 据时,可以显著减少查询中分组和排序的时间。 ●通过索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。

数据库索引的作用及实例

1.1.索引作用 2.在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的 快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。 3. 4.例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每 个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。 5. 6.SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3 7. 8.此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况 下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。 9. 10. 如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询 处理如下。 11. 12.(1)从表t1中选择第一行,查看此行所包含的数据。 13. 14.(2)使用表t2上的索引,直接定位t2中与t1的值匹配的行。类似,利 用表t3上的索引,直接定位t3中与来自t1的值匹配的行。 15. 16.(3)扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行。 17. 18. 在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3 上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。 19. 20. 利用索引,MySQL加速了WHERE子句满足条件行的搜索,而在多表连 接查询时,在执行连接时加快了与其他表中的行匹配的速度。 21. 22.2. 创建索引 23.在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX 或ALTER TABLE来为表增加索引。 24. 25.1.ALTER TABLE 26.ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。 27. 28. 29. 30.ALTER TABLE table_name ADD INDEX index_name (column_list) 31. 32.ALTER TABLE table_name ADD UNIQUE (column_list)

相关文档
相关文档 最新文档