天天看点

谈谈索引的哲学思想

索引:(index)是计算机世界中的一个常见的概念,抛开计算机不谈,在书籍、生活中也常常出现索引或者他的变种。

比如一本技术类的专业书籍中,通常在最后几页,参考文献之前会有一个索引栏目,往往是通过关键词来查找页数(关键词又通过首字母来排序)。其实本质上,首页的目录也是一种索引,索引就是目录。

因此,索引的概念上升到哲学的逻辑,在中文百科中,对于索引的定义是:“索引提供指向存储在表的指定列中的数据值的指针”,虽然这是针对数据库的,但是逻辑依稀可见,所以本文从三处来阐述索引的作用。

————书目录————

每本书都有目录,目录是通过页码的顺序显示每一章每一节的内容。但是目录是一种很特殊的索引,因为读者通常不是为了看第几页而去看第几页是哪一篇文章,所以读者通常情况下(指的是面对一本新书,从来没看过)都是从第一页看是看起,等到熟悉了整个书的布局后,目录的作用才大了起来。

————名词索引————

相比较书的目录,书后的名词索引高效的多,说过,通常专业书籍才有名词索引,因为读者都是相关领域的人,对所有的名词都熟悉,因此这个“目录”是按照关键词的首字母或拼音来排序的,否则如果按页码排序所有单词,查找起来的多难。

————数据库主码————

一般数据库默认都会为主键生成索引。主键通常是not null的递增编号,可以类比书的目录。因为是有序的,数据库检索起来很快。

————数据库索引表————

索引表就是用来快速查找关键词,用来提高效率的一种解决方案,如果说主码是一种根据编号来查找数据的结构,那么就有其他需求比如想要通过“居住地”来查找某个人(请大家自行脑补一张数据库表格,比如学生信息表)。如果只有一次需求,那么遍历“居住地”那一列就行了,如果需求多了呢,这时就需要将“居住地”那一列给索引出来,通过命令<code>CREATE</code> <code>INDEX</code> <code>index_name </code><code>ON</code> <code>table</code><code>(</code><code>column</code><code>(length)),数据库会自动将那一列的关键词分门别类的罗列出来并且按照某个标准排序,形成一张新的表,这样用户查找某一城市的人就方便多快多拉。</code>

————搜索引擎关键词————

搜索引擎很复杂,首先引擎要下载互联网上100+亿张网页,每张网页都要搜索词库中几十万个关键词,现在有一张表了,有两列(只是最简单的情况下),第一列是网页地址,第二列是包含那些关键词。但这张表没卵用啊,用户搜索的是文本,通过关键词查找网页,很显然这张表是通过网页寻找关键词的,那么就要做一个转换,索引关键词到一张新表:第一列是关键词,第二列是包含那些网址。同时肯定也要对关键词排序,以增加查找速度。

————文件系统中的索引————

文件系统非常丰富,例如常见的ntfs和fat系统的头部信息都储存了大量的文件信息,如文件名,大小,物理指针,目录地址,修改日期,创建日期,默认打开方式,等等等数不胜数的属性,同理,文件系统头部这张大表各异根据各列建立各种索引子表,同时利用折半、插值、跳步等查找法快速检索文件。

以上就是索引在IT以及现实生活中的几个应用,可以看到一些哲学性的共性,比如索引可以看成一张表,索引表都有输入和输出,输入通常是单一的,输出可以多个项,还有索引的输入项那一列一定要排序。

---------author:Jim