在HBase中,只有一个单一的按照字典序排序的rowKey索引,当使用rowKey来进行数据查询的时候速度较快,但是如果不使用rowKey来查询的话就会使用filter来对全表进行扫描,很大程度上降低了检索性能。而Phoenix提供了二级索引技术来应对这种使用rowKey之外的条件进行检索的场景。其主要有以下四种索引类型
1、Covered Indexes(覆盖索引)
覆盖索引:只需要通过索引就能返回所要查询的数据,所以索引的列必须包含所需查询的列(SELECT的列和WHRER的列)
不同于hbase的Coprocessor机制创建的二级索引表,Phoenix下的二级索引可以是覆盖索引,即把关心的数据和索引项存储在一张表中,这样就减少了一次读表的时间,而后者主要通过查询关键字再查到主键再利用主键查询最终结果。效率上来讲,是phoenix的一半。
用法示例如下:
CREATE INDEX my_index ON my_lin(v1,v2) INCLUDE(v3)
2、Functional indexes(函数索引)
从Phoeinx4.3以上就支持函数索引,其索引不局限于列,可以合适任意的表达式来创建索引,当在查询时用到了这些表达式时就直接返回表达式结果
函数索引不仅允许直接在列上创建索引,还允许通过基于某一列计算值来创建索引。
用法示例如下:
CREATE INDEX UPPER_NAME_IDX ON EMP (UPPER(FIRST_NAME||' '||LAST_NAME))
该用例实现的功能是创建以大小写不敏感的firstna