Phoenix 十 全域性索引設計實踐

2021-09-20 05:19:05 字數 1062 閱讀 7292

全域性索引是phoenix的重要特性,合理的使用二級索引能降低查詢延時,讓集群資源得以充分利用。 本文將講述如何高效的設計和使用索引。

全域性索引的根本是通過單獨的hbase表來儲存資料表的索引資料。我們通過如下示例看索引資料和主表資料的關係。

-- 建立資料表

create table data_table(

a varchar primary key,

b varchar,

c integer,

d 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條件就要掃瞄全表資料才能過濾出來符合這些條件的資料,所以是極力不推薦的。

phoenix 全域性索引設計實踐

全域性索引是phoenix的重要特性,合理的使用二級索引能降低查詢延時,讓集群資源得以充分利用。本文將講述如何高效的設計和使用索引。全域性索引的根本是通過單獨的hbase表來儲存資料表的索引資料。我們通過如下示例看索引資料和主表資料的關係。建立資料表 create table data table ...

人生,我們十全九美

一 青春,是開啟了就不忍合不上的書 青春就像衛生紙,看著挺多的,可是用著用著就沒有了。時光飛逝,那些年少輕狂,那些叛逆霸道,那些囂張跋扈,那些不懂世事的天經地義,都將永遠的保留在我們的青春紀念冊裡,哪天我們欣然回首,必定會微微一笑,滿臉淚水。二 朋友,是座找到了就捨不得丟的寶庫 朋友是永遠解不開的未...

十全九美也不錯

幾乎沒有人能夠做到十全十美,正如標題一樣 其實十全九美已經是較完美的結局了。影片結局有些讓人遺憾,但是不能奢求每乙個電影的結局都是大圓滿。傳說悲劇的結局遠比喜劇結局給人留下的印象要深。喜劇往往一笑而過,隔日或許只能記得最搞笑的情節。但是這影片也算不上悲劇,只是略有悲情而已。最後合棺一幕有些意思,不管...