4.3 Phoenix 创建索引
4.3.1 Phoenix 索引分类
Phoenix 索引分全局索引和局部索引
全局索引
global index 是默认的索引格式。
适用于多读少写的业务场景。写数据的时候会消耗大量开销,因为索引表也要更新,而索引表是分布在不同的数据节点上的,跨节点的数据传输带来了较大的性能消耗。
在读数据的时候 Phoenix 会选择索引表来降低查询消耗的时间。
如果想查询的字段不是索引字段的话索引表不会被使用,也就是说不会带来查询速度的提升。
创建全局索引的方法:
CREATE INDEX my_index ON my_table (my_col)
局部索引
local index 适用于写操作频繁的场景。索引数据和数据表的数据是存放在相同的服务器中的,避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。
查询的字段不是索引字段索引表也会被使用,这会带来查询速度的提升。
创建局部索引的方法(相比全局索引多了一个关键字 local):
CREATE LOCAL INDEX my_index ON my_table (my_index)
Local index 和 Global index区别:
Local index 由于是数据与索引在同一服务器上,所以要查询的数据在哪台服务器的哪个region是无法定位的,只能先找到region然后再利用索引。
Global index 是一种分布式索引,可以直接利用索引定位服务器和region,速度更快,但是由于分布式的原因,数据一旦出现新增变化,分布式的索引要进行跨服务的同步操作,带来大量的通信消耗。所以在写操作频繁的字段上不适合建立Global index。
4.3.2 创建索引总结
创建全局索引, 也支持查询其他字段
CREATE INDEX my_index ON my_table (v1) INCLUDE (v2) SELECT v2 FROM my_table WHERE v1 = 'foo'
创建局部索引
CREATE LOCAL INDEX my_index ON my_table (v1)
4.3.3 删除索引
DROP INDEX my_index ON my_table