Phoenix二級索引建立

2021-08-27 23:41:34 字數 1023 閱讀 9324

全域性索引是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作為後端儲存,對於hbase來說,我們通常使用字典序的rowkey來快速訪問資料,除此之外,也可以使用自定義的filter來搜尋資料,但是它是基於全表掃瞄的。而phoenix提供的二級索引是可以避開全表掃瞄,是在hbase中快速查詢或批量檢索資料的另乙個選擇。下面的例子使...

Phoenix系列 二級索引(2)

phoenix客戶端在成功提交乙個操作並且得到成功響應後,就代表你所做的操作已經成功應用到原表和相關的索引表中。換句話說,索引表的維護和處理原表資料是同步的,並且各自是強一致性保證的。但是因為索引表和原表是在不同的表中,根據表的屬性和索引的型別,當服務端崩潰導致一次提交失敗時,原表和索引表中的資料就...

建立二級索引 InnoDB索引

聚簇索引 二級索引 聯合索引 innodb的b 數索引的注意事項 索引的一些結論 索引的代價 覆蓋索引 如何挑選索引?主鍵插入順序 b 樹索引在空間和時間上都有代價,不要亂建索引!b 樹索引適用於下邊這些情況 b 樹索引不能用下邊這些情況 asc desc混用 不能高效地利用索引 where子句 現...