提起索引大家通常想到的就是MySQL等关系型数据库管理系统的索引,但索引的定义远远不止这么窄:HBase TreeMap形式的聚集索引,ES等搜索引擎的倒排索引,甚至数组的下标都可以被称为index。
那么索引该怎么定义呢?我从各个权威网站并没有找到很好的描述:Wikipedia并没有为computer science的index做一个概述,而是细分成lookup table、database index、search engine index等进行说明;百度百科只针对数据库领域进行说明:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单;较为满意的一个答案是THE FRRE DICTIONARY上:Something that serves to guide, point out, or otherwise facilitate reference(用于引导、指出或其他帮助引用的事物),不过不够详细具体。
以我的理解,索引的本质是基于对象的一个或多个属性按照某种数据结构(树、哈希、有序链表等)进行组织,以加速查找的一种技术。其中有两个关键点,一是基于一个或多个属性,二是数据结构。