神仙?妖怪?That's what Index in SQL SERVER(1)

最近我们学籍项目组由于对提高数据库查询速度的需要,想到通过对数据库中的某些表中的某些字段建立索引。但是,对于“索引”这个东西,一直关注太少,还真颇有几分神秘色彩。查阅了一些资料,有点认识,与大家分享。说明一下,我将分两个部分来谈“索引”,这篇Blog是第一部分,谈了索引这个词的来历和C#中的索引器;下篇Blog是第二部分,详细讨论Sql Server数据库中的索引机制。

1 说文解字谈“索引”

    汉代文学家许慎著有《说文解字》,对字,词的来源逐一剖析,如庖丁解牛般将字词大卸八块,酣畅淋漓。“索引”这个词我们也不妨来解一解,说一说。

“索”,常跟“绳”组成一个词:“绳索”,为什么?“绳”是“绳索”的中间部分,也就是那条“绳子”;“索”,代表了“绳子”要“绑”在其它东西上才能发挥绳子的作用。怎么“绑”?当然是“索”住:套个圈圈住目标。

好,现在有一条绳子绑住了目标,我们在绳子的另外一头,我们的目标被大量的东西遮盖住了,我们怎么找到目标?当然是顺着“绳子”跟过去,通过绳子的“引导”找到目标。能够“顺藤摸瓜”,完全是因为有这个“绳子”的引导,这也就是“引”。

“索”和“引”合在一起组成了“索引”这个词。通过对这个词的解析,我们可以认识到“索引”向我们指出了一条“明路”使得我们不用“众里寻它千百度”,也不用等到“蓦然回首”的时候,而是直接就朝“灯火阑珊处”走去,发现目标。

在我们的应用中,当“索引”当作动词用时,与“查询”并无多大差别;当作名词用时,则相当于“查找路线”之意。当我们对一大堆东西建立索引,比如新华字典中的“索引”,无非就是对这堆东西进行编撰目录,提供一个简单的界面,以方便查找。

2 C#中的“索引器”

   在谈数据库中的“索引”前,先来谈谈C#语言中的“索引器”。C#语言中有“含参属性”这样一个概念,通常我们也称之为称“索引器”。何来此叫法?我们不妨也来分析一下。

  “含参属性”,顾名思义,这个属性的定义带有参数。我们知道,一个属性是对另一个或者多个变量的包装,提供了一个访问接口。我们需要参数来干什么?如果属性包装的变量是一个,那么当然没有需要参数的必要,因为属性和变量是一一对应的;当这个属性包装的是多个变量呢?外部代码要通过属性这个接口来访问这多个变量中的一个,那就要提供一个参数以定位是对哪一个变量进行访问。这个“参数”提供了“定位”功能,也就提供了一个快速在一堆对象中找到目标的功能,这就是“索引”。正因为如此,“含参属性”也称之为“索引器”。更确切来说,它提供了对一组对象的线性访问能力,使得属性包装的集合对于外部代码就像是一个数组一样,通过参数就可以找到集合中的目标。

posted on 2007年3月7日 9:56 由 ozheric

Comments

2007年3月8日 9:21 by 魏东

# re: 神仙?妖怪?That's what Index in SQL SERVER(1)

“索引”一词解释得很生动。