在不清楚数据表字段数据分布的情况下,应该创建什么类型的索引?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不清楚数据表字段数据分布的情况下,应该创建什么类型的索引?相关的知识,希望对你有一定的参考价值。

在讨论之前,先看看关系型数据库常见的索引类型:

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行的字段值和索引文件的偏移量)

 

在实际查询时,给出查询条件,通过读取索引的元数据可以很快的定位到该查询条件对应的倒排索引,再通过倒排索引查询数据。

 

以上是关于在不清楚数据表字段数据分布的情况下,应该创建什么类型的索引?的主要内容,如果未能解决你的问题,请参考以下文章

使超类字段可观察

Mybatis——实体类属性名和数据库字段名不同时的解决办法

如何在不知道列类型的情况下获取列的值

如何让实体框架在不保存对象的情况下创建/更新数据库表

JAVA如何在不复制新实例引用的情况下更改实例字段值[重复]

创建类并在不带引号的情况下表示它