在讨论之前,先看看关系型数据库常见的索引类型:
1.位图索引,适用于该字段重复数据很多的情况;
2.B+树索引,适用于该字段重复数据不多的情况。
在不清楚数据表字段数据分布的情况下,应该创建什么类型的索引?个人觉得以上两种都不太适用,可以尝试使用第3类的索引:
3.倒排索引,在搜索引擎使用较多,适用于大多数的情况。
使用普通的文本文件格式存储倒排索引,格式为:
value:rowid(行标识码),字段值对应value,rowid对应该行的标识码。
要注意的是,在创建倒排索引时,倒排索引的key需要按ascii码排序。
同时,为了加快搜索的速度,为倒排索引创建索引的元数据,包括:
1.倒排索引文件的最大值和最小值。
2.倒排索引文件索引。
样例元数据如下:
[data]
min:1(该字段最小值)
max:100(该字段最大值)
[index]
1:value,offset(索引文件第1行的字段值和索引文件的偏移量)
10000:value,offset(索引文件第10000行的字段值和索引文件的偏移量)
......
n:value,offset(索引文件第n行的字段值和索引文件的偏移量)
在实际查询时,给出查询条件,通过读取索引的元数据可以很快的定位到该查询条件对应的倒排索引,再通过倒排索引查询数据。