参考:

Phoenix与HBase集成进行数据分析

HBase查询速度慢原因排查

操作1,执行查询,如下:

: jdbc:phoenix:node3::/hbase> SELECT * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168';
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
|                ID                 |         ASSET_ID          | MANAGEMENT_TABLE  | INTRODUCTION  |           MANAGEMENT_ID           |        |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
| 0292ebbfdf3e4d97a6e9fc930ed126d4  | 设345-  | ASSET_SEAL        |               | dd9ff0fc0ad4486bb0812e78fa53ce0e  | - |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
 row selected (0.081 seconds)

操作2,重复以上查询,如下:

: jdbc:phoenix:node3::/hbase> SELECT * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168';
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
|                ID                 |         ASSET_ID          | MANAGEMENT_TABLE  | INTRODUCTION  |           MANAGEMENT_ID           |        |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
| 0292ebbfdf3e4d97a6e9fc930ed126d4  | 设345-  | ASSET_SEAL        |               | dd9ff0fc0ad4486bb0812e78fa53ce0e  | - |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
 row selected (0.077 seconds)

操作3,使用explain重复以上查询,如下:

: jdbc:phoenix:node3::/hbase> explain SELECT * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168';
+----------------------------------------------------------------------------------------------------+-----------------+----------------+--------+
|                                                PLAN                                                | EST_BYTES_READ  | EST_ROWS_READ  |  EST_I |
+----------------------------------------------------------------------------------------------------+-----------------+----------------+--------+
| CLIENT -CHUNK  ROWS  BYTES PARALLEL -WAY ROUND ROBIN FULL SCAN OVER ASSET_RECORD  |        |          |  |
|     SERVER FILTER BY ASSET_ID =        |          |  |
+----------------------------------------------------------------------------------------------------+-----------------+----------------+--------+
 rows selected (0.015 seconds)

操作4,在表上建索引,如下:

: jdbc:phoenix:node3::/hbase> create index IDX_ASSET_RECORD on ASSET_RECORD(ASSET_ID,MANAGEMENT_TABLE);
, rows affected (6.25 seconds)

操作5,强制使用索引执行查询,如下:

: jdbc:phoenix:node3::/hbase> SELECT /*+ INDEX(ASSET_RECORD IDX_ASSET_RECORD)*/ * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168;
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
|                ID                 |         ASSET_ID          | MANAGEMENT_TABLE  | INTRODUCTION  |           MANAGEMENT_ID           |        |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
| 0292ebbfdf3e4d97a6e9fc930ed126d4  | 设345-  | ASSET_SEAL        |               | dd9ff0fc0ad4486bb0812e78fa53ce0e  | - |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
 row selected (0.058 seconds)

操作6,强制使用索引执行查询,如下:

: jdbc:phoenix:node3::/hbase> SELECT /*+ INDEX(ASSET_RECORD IDX_ASSET_RECORD)*/ * FROM ASSET_RECORD WHERE ASSET_ID='设345-1149640126759047168';
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
|                ID                 |         ASSET_ID          | MANAGEMENT_TABLE  | INTRODUCTION  |           MANAGEMENT_ID           |        |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
| 0292ebbfdf3e4d97a6e9fc930ed126d4  | 设345-  | ASSET_SEAL        |               | dd9ff0fc0ad4486bb0812e78fa53ce0e  | - |
+-----------------------------------+---------------------------+-------------------+---------------+-----------------------------------+--------+
 row selected (0.033 seconds)

操作7,使用explain强制使用索引执行查询,如下:

: jdbc:phoenix:node3::/hbase> explain SELECT /*+ INDEX(ASSET_RECORD IDX_ASSET_RECORD)*/ * FROM ASSET_RECORD WHERE ASSET_ID='设345-114964012679047168';
+------------------------------------------------------------------------------------------------------------------+-----------------+-----------+
|                                                       PLAN                                                       | EST_BYTES_READ  | EST_ROWS_ |
+------------------------------------------------------------------------------------------------------------------+-----------------+-----------+
| CLIENT -CHUNK  ROWS  BYTES PARALLEL -WAY ROUND ROBIN FULL SCAN OVER ASSET_RECORD                | null            | null      |
|     SKIP-SCAN-JOIN TABLE                                                                                        | null            | null      |
|         CLIENT -CHUNK PARALLEL -WAY ROUND ROBIN RANGE SCAN OVER IDX_ASSET_RECORD ['设345-1149640126759047168']  | null            | null      |
|             SERVER FILTER BY FIRST KEY ONLY                                                                      | null            | null      |
|     DYNAMIC SERVER FILTER BY .$)                                                      | null            | null      |
+------------------------------------------------------------------------------------------------------------------+-----------------+-----------+
 rows selected (0.045 seconds)

操作8,删除索引,如下:

: jdbc:phoenix:node3::/hbase> drop index IDX_ASSET_RECORD on ASSET_RECORD;
No rows affected (3.688 seconds)

计算操作1和操作2的平均执行时间,建索引后,计算操作5和操作6的平均执行时间,经比较发现使用索引确实提高了查询的速度。

Phoenix具有索引同步更新机制,增删改一条或多条数据以后,索引会自动更新;但是,如果原来的表增加了字段,那就需要更新建在表上的索引。

表的属性越多,条目越多,建索引节约的时间越多,如下是82个属性和195821条记录的表:

: jdbc:phoenix:node3::/hbase> SELECT COUNT(*) FROM ASSET_NORMAL;
+-----------+
| COUNT()  |
+-----------+
|     |
+-----------+
 row selected (4.54 seconds)
: jdbc:phoenix:node3::/hbase> create index IDX_ASSET_NORMAL on ASSET_NORMAL(ASSET_ID,ASSET_NAME,USER_ID);
, rows affected (8.887 seconds)
: jdbc:phoenix:node3::/hbase> SELECT /*+ INDEX(ASSET_NORMAL IDX_ASSET_NORMAL)*/ * FROM ASSET_NORMAL WHERE ASSET_ID='仪1-1151470269278326784';
+-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+
|                ID                 |        ASSET_ID         | ASSET_NAME  | ASSET_FIRST_DEGREE_ID  | ASSET_FIRST_DEGREE_NAME  | ASSET_SECOND_D |
+-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+
| 002e028151e24b07a21e0a0e9ce7f74c  | 仪1-  | 测量仪器        |                 | 仪表                       |      |
+-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+
 row selected (0.209 seconds)
: jdbc:phoenix:node3::/hbase> SELECT * FROM ASSET_NORMAL WHERE ASSET_ID='仪1-1151470269278326784';
+-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+
|                ID                 |        ASSET_ID         | ASSET_NAME  | ASSET_FIRST_DEGREE_ID  | ASSET_FIRST_DEGREE_NAME  | ASSET_SECOND_D |
+-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+
| 002e028151e24b07a21e0a0e9ce7f74c  | 仪1-  | 测量仪器        |                 | 仪表                       |      |
+-----------------------------------+-------------------------+-------------+------------------------+--------------------------+----------------+
 row selected (4.306 seconds)

参考:

https://my.oschina.net/puwenchao/blog/1935302

基于Phoenix对HBase建索引的更多相关文章

  1. hbase建索引的两种方式

    转载自http://blog.csdn.net/ryantotti/article/details/13295325 在二级索引的实现技术上一般有几个方案: 1.      表索引 使用单独的hbas ...

  2. Spark教程——(6)Spark-shell基于Phoenix访问HBase数据

    package statistics import common.util.timeUtil import org.apache.spark.{SparkConf, SparkContext} imp ...

  3. phoenix中添加二级索引

    Phoenix创建Hbase二级索引 官方文档 1. 配置Hbase支持Phoenix创建二级索引   1.  添加如下配置到Hbase的Hregionserver节点的hbase-site.xml  ...

  4. phoenix连接hbase数据库,创建二级索引报错:Error: org.apache.phoenix.exception.PhoenixIOException: Failed after attempts=36, exceptions: Tue Mar 06 10:32:02 CST 2018, null, java.net.SocketTimeoutException: callTimeou

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  5. HBase之八--(2):HBase二级索引之Phoenix

    1. 介绍 Phoenix 是 Salesforce.com 开源的一个 Java 中间件,可以让开发者在Apache HBase 上执行 SQL 查询.Phoenix完全使用Java编写,代码位于 ...

  6. 「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践

    Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs对HBase数据进行增删改查,构建二级索引.当然,开源产品嘛,自然需要注意“避坑”啦,阿丸会把使用方式和最佳实践都告 ...

  7. 通过phoenix在hbase上创建二级索引,Secondary Indexing

    环境描述: 操作系统版本:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 phoenix版本:phoenix-4.10.0 hbase版本: ...

  8. Hadoop生态圈-phoenix(HBase)的索引配置

    Hadoop生态圈-phoenix(HBase)的索引配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 创建索引是为了优化查询,我们可以在phoenix上配置索引方式. 一.修改 ...

  9. Phoenix系列:二级索引(1)

    Phoenix使用HBase作为后端存储,对于HBase来说,我们通常使用字典序的RowKey来快速访问数据,除此之外,也可以使用自定义的Filter来搜索数据,但是它是基于全表扫描的.而Phoeni ...

随机推荐

  1. 「POI2010」Bridges

    传送门 Luogu团队题链接 解题思路 首先二分答案,然后在所有边权小于二分值的边和所有点组成的图中判欧拉回路. 由于可能出现混合图,所以要用到网络流. 把所有无向边钦定一个方向,那么原图就是一个有向 ...

  2. 排序算法之选择排序的python实现

    选择排序算法的工作原理如下: 1. 首先在序列中找到最小或最大元素,存放到排序序列的前或后. 2. 然后,再从剩余元素中继续寻找最小或最大元素. 3. 然后放到已排序序列的末尾. 4. 以此类推,直到 ...

  3. event.clientX和event.clientY

    event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...

  4. 使用命令将单个java文件打包为jar

    思路:先将java文件编译为class文件,然后再打包为jar 参考博文:https://www.cnblogs.com/sxdcgaq8080/p/8126770.html http://www.m ...

  5. 吴裕雄--天生自然Numpy库学习笔记:NumPy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...

  6. ANSYS热分析简介1

    目录 1. ANSYS热分析简介 1.1 传导 1.2 热载荷分类 1.2.1 载荷施加 1.3 热分析分类 1.3.1 稳态热分析 1.3.2 瞬态热分析 1.3.3 非线性分析综述 2. 热分析单 ...

  7. 【原】tcp三次握手和四次挥手

  8. 疫情对国内5G发展的影响

    导读 2020年春节期间,“新型冠状病毒”引发了自SARS之后又一次全国性疫情,而世卫组织也将之列为国际关注的突发公共卫生事件,随后多国发布了针对中国的旅行警告和入境限制,从当前情况来看,疫情对中国各 ...

  9. RFID学习

    RFID:射频识别卡有读卡器和电子标签(有源/无源/半有源)组成,工作频率有LF/HF/UHF/MF,低频的通讯距离近(1m)常用来做门禁:高频的通讯距离远可以批量读取. 无源的轻巧/防拆一致性好,在 ...

  10. Update(stage3):第1节 redis组件:8、主从复制架构;9、Sentinel架构

    8.redis的主从复制架构 在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(ma ...