Phoneix中的二级索引知识点

二级索引分类

Phoneix的索引底层还是表现为HBase中的表结构(每建一个索引就回增加一个表),这些索引表专门用来加速查询速度.你 用索引表加快查询

  • 读多写少:全局索引
  • 读少写多:本地索引

索引可以理解成二叉树

在这里插入图片描述

1,全局索引:二叉树里只有RowKey的地址值.

  • 针对整张表,在整个HBase集群中,都是有效的,索引数据会分布在全局

2,覆盖索引:二叉树不光有Rowkey,而且把你要查的数据完整信息都放在里面了,占用空间更大,不像全局索只存放地址值

  • 将数据直接存放在索引中,直接查询索引值就可以将数据查询出来,避免再根据rowkey查询数据
CREATE INDEX my_index ON my_table (v1,v2) INCLUDE(v3)

3,本地索引:本地索引和数据是存放在一起的.(是在同一张表里,与列簇平行的那种)

  • 索引数据和表数据存储在一起,方便高效查询.

4.函数索引

  • 基于一个函数表达式来创建索引,例如:where substr(xx,0,10)…,就可以基于substr(xxx,0,10)建立索引

全局索引对本地表是没影响的(另起炉灶建了一张索引表),本地索引不一样,本地索引是整合在本地表里,会改变本地表的结构.

全局索引+覆盖索引
全局索引会单独创建一张HBase的表来保存索引数据,一般经常配合覆盖索引来使用.将要查询的列和索引列全部数据全部都保存在表中,这样可以有效避免查询索引之后还要去查询数据表,一次查询全部搞定.
在这里插入图片描述

-- 二、在phoenix中创建二级索引
-- 根据用户ID来查询订单的ID以及对应的支付金额
-- 建立一个覆盖索引,加快查询
create index IDX_USER_ID on ORDER_DTL(C1."user_id") include ("id", C1."money");

-- 删除索引
drop index IDX_USER_ID on ORDER_DTL;

-- 强制使用索引查询
explain select /*+ INDEX(ORDER_DTL IDX_USER_ID) */ * from ORDER_DTL where "user_id" = '8237476';

本地索引的补充

  • 使用 create local index 索引名称 on 表名(列1, 列2)
  • 本地索引对数据是有侵入性的,就是原先的数据会被编码处理,所以只要创建了本地索引,原先的数据就会隐藏起来
  • 性能提升几十倍、上百倍
  • 当drop掉索引后,数据又可以恢复回来
  • 这些都是由Phoenix的协处理器来实现的

关于创建Phonix索引,但查询用不上的解释

下面截图文档的意思是说:有两种分区方式, 一 用RowKey来进行预分区,二指定Region的数量进行预分区 重点来了不可以在第二种方式创建的表的基础上,创建索引表
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值