html下载网站模板,建设网站好学吗,东莞网络优化公司排名,wordpress 欲思概述
全局索引是Phoenix的重要特性#xff0c;合理的使用二级索引能降低查询延时#xff0c;让集群资源得以充分利用。 本文将讲述如何高效的设计和使用索引。
全局索引说明
全局索引的根本是通过单独的HBase表来存储数据表的索引数据。我们通过如下示例看索引数据和主表数…概述
全局索引是Phoenix的重要特性合理的使用二级索引能降低查询延时让集群资源得以充分利用。 本文将讲述如何高效的设计和使用索引。
全局索引说明
全局索引的根本是通过单独的HBase表来存储数据表的索引数据。我们通过如下示例看索引数据和主表数据的关系。
-- 创建数据表
CREATE TABLE DATA_TABLE(A VARCHAR PRIMARY KEY,B VARCHAR,C INTEGERD INTEGER);-- 创建索引
CREATE INDEX B_IDX ON DATA_TABLE(B)INCLUDE(C);-- 插入数据
UPSERT INTO DATA_TABLE VALUES(A,B,1,2);
当写入数据到主表时索引数据也会被同步到索引表中。索引表中的主键将会是索引列和数据表主键的组合值include的列被存储在索引表的普通列中其目的是让查询更加高效只需要查询一次索引表就能够拿到数据而不用去回查主表。其过程入下图
Phoenix表就是HBase表而HBase Rowkey都是通过二进制数据的字典序排列存储也就意味着Row key前缀匹配度越高就越容易排在一起。
全局索引设计
我们继续使用DATA_TABLE作为示例表创建如下组合索引。之前我们已经提到索引表中的Row key是字典序存储的什么样的查询适合这样的索引结构呢
CREATE INDEX B_C_D_IDX ON DATA_TABLE(B,C,D); 所有字段条件以操作符为例 注上表查询中and条件不一定要和索引组合字段顺序一致可以任意组合。
在实际使用中我们也只推荐使用1~4遵循前缀匹配原则避免触发扫全表。5~7条件就要扫描全表数据才能过滤出来符合这些条件的数据所以是极力不推荐的。
其它
对于order by字段或者group by字段仍然能够使用二级索引字段来加速查询。尽量通过合理的设计数据表的主键规避建更多的索引表因为索引表越多写放大越严重。使用了ROW_TIMESTAMP特性后不能使用全局索引对索引表适当是的使用加盐特性能提升查询写入性能避免热点。
原文链接 本文为云栖社区原创内容未经允许不得转载。