官网关于explain的链接: http://phoenix.apache.org/explainplan.html
1. 简介
简单来说, 就是通过在SQL前面加上 explain命令, 来查看这个SQL准备要做些什么。
两个重点:1,SQL最好走索引或者主键 2,避免全表扫描
命令示意:
正常SQL:
select a from my_table;
查看执行计划SQL:
explain select a from my_table;
2. 执行计划会告诉我们什么?
- 将要扫描的CHUNK数量
- 客户端并发线程数量
- 执行模式(并行或串行)
- 查询过滤字段或者扫描范围
- 将会查询的hbase表名
- 估算扫描数据bytes大小和数据量大小(依赖stats信息)
- 估算扫描的行数
- 估算数量bytes大小和数据量时间
- 操作符被执行在客户端或者服务端
- 在客户端与服务端分别执行了哪些操作(排序,合并,扫描,limit限制)
3. 性能良好的执行计划应该满足以下条件:
1. 除了必要的客户端操作外, 大多数操作应该尽可能的都在服务端, 因为服务端是一个集群, 处理速度快, 而客户端只是一个单独的机器.
2. 尽可能使用RANGE SCAN或SKIP SCAN而不是TABLE SCAN, 也就是最好不要出现全表扫描。尽量避免出现FULL SCAN,尤其对于不走索引表的单表查询,不应该出现FULL SCAN
3. 查询SQL中, where条件最好是包含所有的主键, 最次也要包含前几个, 前几个不能省略, 否则会大大的降低性能, 出现全表扫描的情况.
4. 最好使用索引查询, 索引可以明显的提升查询速度
5. 如果你的SQL包含了索引字段, 但是Phoenix协处理器并没有在执行SQL的时候使用索引, 可以强制指定索引, 语法为:
SELECT /*+ INDEX(my_table my_index) */ v2 FROM my_table WHERE v1 =