HBase SQL(Phoenix)二级索引
更新时间:2022-09-22
HBase SQL(Phoenix)二级索引
简介
Phoenix支持多种二级索引功能。
全局索引
全局索引适用于读负载较重的场景。对于全局索引,索引的所有性能损失都发生在数据写入时。我们在写入时拦截数据表更新(DELETE、UPSERT VALUES和UPSERT SELECT),构建索引更新,然后向所有相关索引表发送更新。在读取时,Phoenix将选择要速度最快的索引表,并像遍历任何其他HBase表一样直接遍历它。当一个索引被用于某个查询时,会保证该查询中所有被引用的列均可在该索引中找到。
全局索引创建语句如下:
CREATE TABLE DATA_TABLE (
A VARCHAR PRIMARY KEY,
B VARCHAR,
C INTERGER
);
CREATE INDEX B_IDX ON DATA_TABLE(B) INCLUDE C;
本地索引
本地索引适用于写负载较重的场景。与全局索引一样,Phoenix将在查询时自动选择是否使用本地索引。使用本地索引时,索引数据和表数据将被存储在同一服务器上,从而防止写入期间的任何网络开销。即使查询没有被完全覆盖,本地索引也可以被使用(即Phoenix通过数据表的点查询自动检索索引中没有的列)。
与全局索引不同,在4.8.0版本之前,表的所有本地索引都存储在单独的共享表中。从4.8.0开始,Phoenix将所有本地索引数据存储在同一数据表中的单独隐藏列族中。当使用本地索引进行读取时,用户必须首先检查region的数据,因为无法预先确定本地索引确切位置。因此,读取操作会产生一些额外开销。
关于Phoenix二级索引更多的内容请参照Phoenix二级索引官方文档。