1、为什么要创建索引呢?
这是因为,创建索引可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
2、也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?
这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点, 但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。
第一,创建索引和维护索引要耗费时间,这种时间随着数据 量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
3、索引是建立在数据库表中的某些列的上面
因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列 上创建索引,例如:
在经常需要搜索的列上,可以加快搜索的速度;
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度;
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
在经常需要排序的列上创 建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
4、同样,对于有些列不应该创建索
一般来说,不应该创建索引的的这些列具有下列特点:
第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
第二,对于那 些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索引。
5、创建索引的方法
创建索引有多种方法,这些方法包括直接创建索引的方法和间接创建索引的方法。直接创建索引,例如使用CREATE INDEX语句或者使用创建索引向导,间接创建索引,例如在表中定义主键约束或者唯一性键约束时,同时也创建了索引。虽然,这两种方法都可以创建索引,但 是,它们创建索引的具体内容是有区别的。
使用CREATE INDEX语句或者使用创建索引向导来创建索引,这是最基本的索引创建方式,并且这种方法最具有柔性,可以定制创建出符合自己需要的索引。在使用这种方式 创建索引时,可以使用许多选项,例如指定数据页的充满度、进行排序、整理统计信息等,这样可以优化索引。使用这种方法,可以指定索引的类型、唯一性和复合 性,也就是说,既可以创建聚簇索引,也可以创建非聚簇索引,既可以在一个列上创建索引,也可以在两个或者两个以上的列上创建索引。
通过定义主键约束或者唯一性键约束,也可以间接创建索引。主键约束是一种保持数据完整性的逻辑,它限制表中的记录有相同的主键记录。在创建主键约束时,系 统自动创建了一个唯一性的聚簇索引。虽然,在逻辑上,主键约束是一种重要的结构,但是,在物理结构上,与主键约束相对应的结构是唯一性的聚簇索引。换句话 说,在物理实现上,不存在主键约束,而只存在唯一性的聚簇索引。同样,在创建唯一性键约束时,也同时创建了索引,这种索引则是唯一性的非聚簇索引。因此, 当使用约束创建索引时,索引的类型和特征基本上都已经确定了,由用户定制的余地比较小。
当在表上定义主键或者唯一性键约束时,如果表中已经有了使用CREATE INDEX语句创建的标准索引时,那么主键约束或者唯一性键约束创建的索引覆盖以前创建的标准索引。也就是说,主键约束或者唯一性键约束创建的索引的优先 级高于使用CREATE INDEX语句创建的索引。
6、索引的特征
索引有两个特征,即唯一性索引和复合索引。
唯一性索引保证在索引列中的全部数据是唯一的,不会包含冗余数据。如果表中已经有一个主键约束或者唯一性键约束,那么当创建表或者修改表时,SQL Server自动创建一个唯一性索引。然而,如果必须保证唯一性,那么应该创建主键约束或者唯一性键约束,而不是创建一个唯一性索引。当创建唯一性索引 时,应该认真考虑这些规则:当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引;如果表中已经包含有数据,那么当创建索引时,SQL Server检查表中已有数据的冗余性;每当使用插入语句插入数据或者使用修改语句修改数据时,SQL Server检查数据的冗余性:如果有冗余值,那么SQL Server取消该语句的执行,并且返回一个错误消息;确保表中的每一行数据都有一个唯一值,这样可以确保每一个实体都可以唯一确认;只能在可以保证实体 完整性的列上创建唯一性索引,例如,不能在人事表中的姓名列上创建唯一性索引,因为人们可以有相同的姓名。
复合索引就是一个索引创建在两个列或者多个列上。在搜索时,当两个或者多个列作为一个关键值时,最好在这些列上创建复合索引。当创建复合索引时,应该考虑 这些规则:最多可以把16个列合并成一个单独的复合索引,构成复合索引的列的总长度不能超过900字节,也就是说复合列的长度不能太长;在复合索引中,所 有的列必须来自同一个表中,不能跨表建立复合列;在复合索引中,列的排列顺序是非常重要的,因此要认真排列列的顺序,原则上,应该首先定义最唯一的列,例 如在(COL1,COL2)上的索引与在(COL2,COL1)上的索引是不相同的,因为两个索引的列的顺序不同;为了使查询优化器使用复合索引,查询语 句中的WHERE子句必须参考复合索引中第一个列;当表中有多个关键列时,复合索引是非常有用的;使用复合索引可以提高查询性能,减少在一个表中所创建的 索引数量。
索引是个既稳定又开放的信息结构,它有十一种功能。
1、分解功能
把文献中的资料单元(如篇名、机构、短语、概念、物名、地名、书名、人名、字词、符号等)一一分解,这就是索引的分解功能。它是索引工作的起跑线和索引编纂的基础,没有对文献内容的这种分解功能,就没有索引。
过去有些反对索引的人说,索引是把古人的著书“凌迟碎割”。他们对索引法的反对,实出于对流传已久的那种落后的皓首穷经的陋习的偏爱和对新的治学方法的无知,洪业曾鄙视他们为卧于涸辙的鲋鱼,以升斗之水济命,而不知西江水之可羡。虽然如此,但他们所谓的索引是把古人著书“凌迟碎割”的形象说法,却从反面十分正确地道破了索引的分解功能。
分解功能是索引作用于文献的特殊功能,是它和其他检索工作不同之处。
2、梳理功能
每种文献都包容着许多不同性质的资料单元,它们在文献中基本呈无序的状态。把这些无序状态的资料单元按外表特征或内容性质进行各归其类的整理,这就是索引的梳理功能。章学诚早就发现了这种功能,他在给《族孙守一论史表》信中要求其在治二十四史年表时一并把廿二史列传中的人名编成索引,两者互为经纬,这样便可使考古之士,于纷如乱丝之资料中,忽得梳通栉理。
梳理功能是索引分解的后继。如果只有分解功能而没有梳理的功能,那么分解功能就没有价值。
梳理是对资料单元的初分。如是字序,只要按笔划或音序归类即可;如是类序只要按大类归纳即可。就像小姑娘梳头,先把长发梳顺,而编什么辫子或梳什么发型则是下一步的要求了。
3、组合功能
把梳理后的资料单元按照分类的要求,严密地组织它们的类别层次以及类目下的专题和同类目下款目的序列关系;或按字序的要求,严密地把标目的结构正装或倒装、考虑限定词对标目的限定和修饰的级数、或考虑字序和类序相结合的可能。此外,不论是类序或字序都要考虑参照系统的建立方案,使相关款目形成网络,使用户检索的眼界得以拓宽。这些,都是索引的组合功能。
过去,国外的同行曾把圣经的页边索引以“串珠”命名;我国有人曾把本草的方剂编成索引,以“针线”命名,“串珠”和“针线”是索引组合功能很形象的描绘。它使文献资料单元成为一串串的明珠,成为被针线贯穿起来的资料单元的珍品。
4、结网功能
对某个领域的文献进行有计划的索引编纂,利用类型的结构从各种不同的角度和层次对这些文献的内容进行纵横交错和多维的揭示和组合,使之形成一个检索这些文献中的各种不同性质的资料单元的网络。这就是索引的结网功能。
由“主表”和“词族索引”、“范畴索引”、“英汉对照索引”等所组成的《汉语主题词表》是由几种不同性质的索引构建的一个主题词间的联系、辨析主题词词义和被标引的文献主题概念是否精确的一个隐含的语义网络,它对文献中的资料单元产生族性检索和扩大检索途径的作用。这个网络的结构和作用就是运用索引结网功能的一个范例。
《古今图书集成》囊括了清初以前绝大部分的文献,是我国现存最大的一部类书,广西大学林仲湘等根据它的特点,分别编了经线索引、纬线索引、图表索引、人物传记索引、职方典汇考引和禽虫草木三典释名索引,从该书的各级类目和内容等不同角度交叉编结了一个严密的揭示网络,这又是索引结网功能的具体运用的例证。
5、揭示功能
分解功能只是客观地对文献进行解剖,而揭示功能有较强的目的性,它最常出现的是按专业的需要挑选某些资料单元。
在主题索引的编制中,主题概念的分析和主题词的选用,包括对隐性主题的析出是这种功能的体现。
各种专题索引或各种专业的文摘索引也是索引揭示功能的运用。清朝徐克祺称赞蔡烈先的《本草万方针线》为镜考、为烛照,这是对索引揭示功能很生动的形容。
6、鉴别功能
文献是作者思维的物化,包含了作者用以施展其聪明才智的特有的言语轨迹及其思想气质。在文献的出版史中,出于各种不同的动机和原因,真伪之作叠出,为杜伪辨真,不少人引经据典,注疏考证,一字之微,动千万言,甚至引发了校勘学的出现。近年来又产生了利用索引进行鉴别的方法,通过逐字索引分解被鉴别的文献,即同时从两种版本中分析作者用字(词)的规律和频率以甄别其真伪。
英国的女研究学家凯洛莱因·斯彼琴曾对莎士比亚的剧作进行过有趣的用词统计和分析,她发现,莎氏使用的许多诗意的语言都和大自然以及乡村生活有关。又有人在研究司马迁的《史记·货殖列传》时,发现这篇不到5000字的文章竟使用49次“富”字,由此得出,致“富”是这篇论文的主题。这些事例证明通过对文献中用词的解剖可以发现作者的特有气质和语言习惯,索引可利用这种潜在的规律辨析文献的真伪。
7、追踪功能
索引像只嗅觉灵敏的警犬一样能追踪各种领域的事物在文献中留下来的痕迹。
一部旧时代报纸的索引,能追踪那个时代的重大历史事件,并清晰地再现这些重大的历史事件脉络;一部类书的索引,能追踪许多名人的各方面的成就和言行;一种专业期刊的刊后索引,能追踪当年该专业学科研究的动态;一部跨多年度的报刊回溯索引,就是一部多功能的追踪记录。
追踪,是索引的功能之一。
8、导航功能
导航就是指引,它带有较强的评价取向,索引具有这种功能。
过去,我国有一些所谓新产品,在技术人员的积极努力下问市了,但到国际市场上却被打回票,因为这种新产品在别的国家已成老产品。技术人员的情报鼻子不灵,其中原因之一是不查阅有关的索引,不依靠这个情报导航工具,以致迷失了生产的方向。
在哲学社会科学的领域中,索引经常能提供在某个时期某个专业的理论动向和水平的第一手材料,许多科研工作者就依靠索引的导航,找到自己出发的港湾和要达到的彼岸。
洪业在《引得说》中指出:“引得者,予学者以游翔于载籍之舟车也。舟车愈善,则其所游愈广,所入愈深。”这就是索引的导航功能。
9、执简功能
您感到在信息爆炸的文献环境中很难伸展自己的科研手脚吧?那么,请您先为自己的研究对象编编索引,那就可以执简御繁了。我国的史学家顾颉刚曾说:“我常想暂不办学术研究所而先办材料整理所。”“索引,也是研究的基础的一种,它能给您一个钥匙,使您在许多头绪不清的材料中找出头绪,而得到你所需要的东西。”
国外盛行的那种快速反映科研情报的KWIC、KWOC,就是发挥索引执简功能的工具,把众多科研期刊中的关键词以最简要的格式显现,使用户能享受“索引在手,千刊掌握”的好处,而避免花去一半的科研时间在众多的资料堆中苦苦求索。因而,不少科研工作者赞誉索引有“天增岁月人增寿”的妙用。
10、检索功能
索引诞生在文献检索困难的历史背景里,它的检索功能随索引的诞生同步而生。在近二千年的索引发展史中,检索功能的变化和发展就是它的主要内容。所以,检索功能是索引最基本的功能。
任何文献记录或工作记录一旦和索引方法挂上钩,它就会从山穷水尽疑无路的困境中解脱出来,很快得到检索方便的好处,机关或企业中人事档案和工资单的人员的索引就是如此。又如,最令旅游者头疼的是,到了一个旅游点,买了地图,但要寻找一个地区、一条街道或里弄,那真像大海捞针一样的困难。当这幅地图加上了地名索引后,所要之地名便一检即得了。
11、预测功能
索引中有不少数学现象,如从引文索引中统计到被引作者的论文频率,便基本上能预测到这个专业的学术带头人的出现;从题录索引中统计的课题内容,便可预测到学术界未来研究的动向;从统计索引中出现的各种产品名称的频率,便能预测到市场将出现的热门商品。这些都是索引的预测功能。