概述
全域性索引是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條件不一定要和索引組合字段順序一致,可以任意組合。
在實際使用中我們也只推薦使用14,遵循字首匹配原則,避免觸發掃全表。57條件就要掃瞄全表資料才能過濾出來符合這些條件的資料,所以是極力不推薦的。
其它 對於order by欄位或者group by欄位仍然能夠使用二級索引欄位來加速查詢。
盡量通過合理的設計資料表的主鍵規避建更多的索引表,因為索引表越多寫放大越嚴重。
使用了row_timestamp特性後不能使用全域性索引
對索引表適當是的使用加鹽特性能提公升查詢寫入效能,避免熱點。
phoenix 全域性索引設計實踐
全域性索引是phoenix的重要特性,合理的使用二級索引能降低查詢延時,讓集群資源得以充分利用。本文將講述如何高效的設計和使用索引。全域性索引的根本是通過單獨的hbase表來儲存資料表的索引資料。我們通過如下示例看索引資料和主表資料的關係。建立資料表 create table data table ...
Phoenix 十 全域性索引設計實踐
全域性索引是phoenix的重要特性,合理的使用二級索引能降低查詢延時,讓集群資源得以充分利用。本文將講述如何高效的設計和使用索引。全域性索引的根本是通過單獨的hbase表來儲存資料表的索引資料。我們通過如下示例看索引資料和主表資料的關係。建立資料表 create table data table ...
mysql索引實踐 MySQL索引實踐
資料庫索引本質上是一種資料結構 儲存結構 演算法 目的是為了加快資料檢索速度。1 索引的型別 待完善 主鍵索引 給表設定主鍵,這個表就擁有主鍵索引。唯一索引 unique 普通索引 增加某個欄位的索引,比如使用者表根據使用者名稱查詢。組合索引 使用多個字段建立索引,遵循最左原則,比如建立索引 col...