1. explain select count(1) from alarm_record;
    2. 1 row selected (0.07 seconds)
    3. 0: jdbc:phoenix:192.168.10.10:2181> select count(1) from alarm_record;
    4. +-----------+
    5. | COUNT(1) |
    6. +-----------+
    7. | 13091 |
    8. +-----------+
    9. 1 row selected (0.065 seconds)
    10. 0: jdbc:phoenix:192.168.10.10:2181> explain select count(1) from alarm_record;
    11. +------------------------------------------------------------+-----------------+----------------+--------------+
    12. | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
    13. +------------------------------------------------------------+-----------------+----------------+--------------+
    14. | CLIENT 1-CHUNK PARALLEL 1-WAY FULL SCAN OVER ALARM_RECORD | null | null | null |
    15. | SERVER FILTER BY FIRST KEY ONLY | null | null | null |
    16. | SERVER AGGREGATE INTO SINGLE ROW | null | null | null |
    17. +------------------------------------------------------------+-----------------+----------------+--------------+
    18. 3 rows selected (0.02 seconds)
    19. ---
    20. 0: jdbc:phoenix:192.168.10.10:2181> explain select * from alarm_record where row_key = '1001820331580712319000' ;
    21. +------------------------------------------------------------------------------------------------------+-----------------+----------------+--------------+
    22. | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
    23. +------------------------------------------------------------------------------------------------------+-----------------+----------------+--------------+
    24. | CLIENT 1-CHUNK 1 ROWS 1365 BYTES PARALLEL 1-WAY ROUND ROBIN POINT LOOKUP ON 1 KEY OVER ALARM_RECORD | 1365 | 1 | 0 |
    25. +------------------------------------------------------------------------------------------------------+-----------------+----------------+--------------+

    执行计划 explain 详情

    1. []
    2. : http://phoenix.apache.org/explainplan.html
    3. []
    4. : explain命令, 来查看这个SQL准备要做些什么
    5. 1. 将要执行的所有HBase查询
    6. 2. 预估要扫描的字节数
    7. 3. 预估要遍历的行数
    8. 4. 收集上述预估信息的时间
    9. 5. 每次扫描会使用哪个HBase
    10. 6. 在客户端与服务端分别执行了哪些操作(排序,合并,扫描,limit限制)
    11. 1. 除了必要的客户端操作外, 大多数操作应该尽可能的都在服务端, 因为服务端是一个集群, 处理速度快, 而客户端只是一个单独的机器.
    12. 2. 尽可能使用RANGE SCANSKIP SCAN而不是TABLE SCAN, 也就是最好不要出现全表扫描
    13. 3. 查询SQL中, where条件最好是包含所有的主键, 最次也要包含前几个, 前几个不能省略, 否则会大大的降低性能, 出现全表扫描的情况.
    14. 4. 最好使用索引查询, 索引可以明显的提升查询速度
    15. 5. 如果你的SQL包含了索引字段, 但是Phoenix协处理器并没有在执行SQL的时候使用索引, 可以强制指定索引, 语法为:
    16. SELECT /*+ INDEX(my_table my_index) */ v2 FROM my_table WHERE v1 = 'foo'
    1. AGGREGATE INTO ORDERED DISTINCT ROWS
    2. 使用诸如加法之类的操作聚合返回的行。使用有GROUP BY子句的聚合函数将结果聚合为不同的多行
    3. AGGREGATE INTO SINGLE RO
    4. 使用没有GROUP BY子句的聚合函数将结果聚合为单行。例如,count()语句返回一行,其中包含与查询匹配的总行数。
    5. CLIENT
    6. 操作将在客户端执行。在服务器端执行大多数操作的速度更快,因此您应该考虑是否有办法重写SQL查询语句, 以便让更多的操作都在服务器执行, 提高查询效率.
    7. FILTER BY 表达式
    8. 仅返回与表达式匹配的结果, 就是过滤器
    9. - FULL SCAN OVER tableName
    10. 全表扫描, 出现了这种情况, 就要修改SQL了, 不然性能会很慢
    11. INNER-JOIN
    12. 该操作将在满足连接条件的行上连接多个表
    13. MERGE SORT
    14. 对结果执行合并排序
    15. RANGE SCAN OVER tableName [ ]
    16. 方括号中的信息表示查询中使用的每个主键的开始和停止。
    17. EST_BYTES_READ
    18. 预估扫描的总字节数
    19. EST_ROWS_READ
    20. 预估扫描的总行数
    21. EST_INFO_TS
    22. 收集统计信息的时间点(毫秒), 其实就是时间戳

    单主键查询

    1. 0: jdbc:phoenix:192.168.10.10:2181> select count(1) from alarm_record;
    2. +-----------+
    3. | COUNT(1) |
    4. +-----------+
    5. | 275960 |
    6. +-----------+
    7. 1 row selected (1.567 seconds)
    8. 0: jdbc:phoenix:192.168.10.10:2181> explain select count(1) from alarm_record;
    9. +----------------------------------------------------------------------------------------+-----------------+----------------+----------------+
    10. | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
    11. +----------------------------------------------------------------------------------------+-----------------+----------------+----------------+
    12. | CLIENT 1-CHUNK 230456 ROWS 314572800 BYTES PARALLEL 1-WAY FULL SCAN OVER ALARM_RECORD | 314572800 | 230456 | 1585213754232 |
    13. | SERVER FILTER BY FIRST KEY ONLY | 314572800 | 230456 | 1585213754232 |
    14. | SERVER AGGREGATE INTO SINGLE ROW | 314572800 | 230456 | 1585213754232 |
    15. +----------------------------------------------------------------------------------------+-----------------+----------------+----------------+
    16. 3 rows selected (0.025 seconds)
    17. 0: jdbc:phoenix:192.168.10.10:2181> select * from alarm_record where alarm_type_id = 36 and vehicle_id in ('V100182') and start_time < TO_TIMESTAMP('2020-03-27 00:00:00') limit 10;
    18. +-------------------------+-------------+----------------+--------------------------+--------------------------+--------------------------+------------+------------------+-----------------+----------------+--------------+
    19. | ROW_KEY | VEHICLE_ID | ALARM_TYPE_ID | CREATE_DATE | START_TIME | END_TIME | TIME_SPAN | START_LONGITUDE | START_LATITUDE | END_LONGITUDE | END_LATITUDE |
    20. +-------------------------+-------------+----------------+--------------------------+--------------------------+--------------------------+------------+------------------+-----------------+----------------+--------------+
    21. | 1001820361582523029000 | V100182 | 36 | 2020-02-24 09:42:50.000 | 2020-02-24 05:43:49.000 | | 0 | 120.352538 | 32.499 | 0.0 | 0.0 |
    22. | 1001820361582529123000 | V100182 | 36 | 2020-02-24 12:55:34.000 | 2020-02-24 07:25:23.000 | | 0 | 120.341108 | 32.43488 | 0.0 | 0.0 |
    23. | 1001820361582535148000 | V100182 | 36 | 2020-02-24 16:03:32.000 | 2020-02-24 09:05:48.000 | | 0 | 120.341025 | 32.435011 | 0.0 | 0.0 |
    24. | 1001820361582541133000 | V100182 | 36 | 2020-02-24 18:30:58.000 | 2020-02-24 10:45:33.000 | | 0 | 120.352527 | 32.498905 | 0.0 | 0.0 |
    25. | 1001820361582541144000 | V100182 | 36 | 2020-02-24 18:31:10.000 | 2020-02-24 10:45:44.000 | | 0 | 120.352527 | 32.498905 | 0.0 | 0.0 |
    26. | 1001820361582541205000 | V100182 | 36 | 2020-02-24 18:32:22.000 | 2020-02-24 10:46:45.000 | | 0 | 120.352527 | 32.498905 | 0.0 | 0.0 |
    27. | 1001820361582586275000 | V100182 | 36 | 2020-02-25 01:51:10.000 | 2020-02-24 23:17:55.000 | | 0 | 120.264727 | 32.67873 | 0.0 | 0.0 |
    28. | 1001820361582592885000 | V100182 | 36 | 2020-02-25 05:23:17.000 | 2020-02-25 01:08:05.000 | | 0 | 120.35285 | 32.499086 | 0.0 | 0.0 |
    29. | 1001820361582592892000 | V100182 | 36 | 2020-02-25 05:23:28.000 | 2020-02-25 01:08:12.000 | 2020-02-27 09:39:58.000 | 203506 | 120.35285 | 32.499086 | 120.352819 | 32.49913 |
    30. | 1001820361582796851000 | V100182 | 36 | 2020-02-27 12:25:01.000 | 2020-02-27 09:47:31.000 | 2020-02-27 21:02:12.000 | 40481 | 120.352819 | 32.49913 | 120.35278 | 32.499038 |
    31. +-------------------------+-------------+----------------+--------------------------+--------------------------+--------------------------+------------+------------------+-----------------+----------------+--------------+
    32. 10 rows selected (0.203 seconds)
    33. 0: jdbc:phoenix:192.168.10.10:2181> explain select * from alarm_record where alarm_type_id = 36 and vehicle_id in ('V100182') and start_time < TO_TIMESTAMP('2020-03-27 00:00:00') limit 10;
    34. +-----------------------------------------------------------------------------------------------------------------------+-----------------+----------------+----------------+
    35. | PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
    36. +-----------------------------------------------------------------------------------------------------------------------+-----------------+----------------+----------------+
    37. | CLIENT 1-CHUNK 230456 ROWS 314572800 BYTES PARALLEL 1-WAY ROUND ROBIN FULL SCAN OVER ALARM_RECORD | 314572800 | 230456 | 1585213754232 |
    38. | SERVER FILTER BY (ALARM_TYPE_ID = 36 AND VEHICLE_ID = 'V100182' AND START_TIME < DATE '2020-03-27 00:00:00.000') | 314572800 | 230456 | 1585213754232 |
    39. | SERVER 10 ROW LIMIT | 314572800 | 230456 | 1585213754232 |
    40. | CLIENT 10 ROW LIMIT | 314572800 | 230456 | 1585213754232 |
    41. +-----------------------------------------------------------------------------------------------------------------------+-----------------+----------------+----------------+
    42. 4 rows selected (0.048 seconds)
    • 单主键删除
    0: jdbc:phoenix:192.168.10.10:2181> explain DELETE FROM alarm_record WHERE row_key = '1001820361582523029000';
    +--------------------+-----------------+----------------+--------------+
    |        PLAN        | EST_BYTES_READ  | EST_ROWS_READ  | EST_INFO_TS  |
    +--------------------+-----------------+----------------+--------------+
    | DELETE SINGLE ROW  | 0               | 0              | 0            |
    +--------------------+-----------------+----------------+--------------+
    1 row selected (0.031 seconds)
    0: jdbc:phoenix:192.168.10.10:2181> explain DELETE FROM alarm_record WHERE row_key = '1001820361582523029000';
    +--------------------+-----------------+----------------+--------------+
    |        PLAN        | EST_BYTES_READ  | EST_ROWS_READ  | EST_INFO_TS  |
    +--------------------+-----------------+----------------+--------------+
    | DELETE SINGLE ROW  | 0               | 0              | 0            |
    +--------------------+-----------------+----------------+--------------+
    1 row selected (0.028 seconds)
    0: jdbc:phoenix:192.168.10.10:2181> DELETE FROM alarm_record WHERE row_key = '1001820361582523029000';
    1 row affected (0.072 seconds)
    
    • 非主键删除
    0: jdbc:phoenix:192.168.10.10:2181> explain DELETE FROM alarm_record_01 WHERE row_key = '1001820361582523029000';
    +---------------------------------------------------------------+-----------------+----------------+--------------+
    |                             PLAN                              | EST_BYTES_READ  | EST_ROWS_READ  | EST_INFO_TS  |
    +---------------------------------------------------------------+-----------------+----------------+--------------+
    | DELETE ROWS                                                   | null            | null           | null         |
    | CLIENT 1-CHUNK PARALLEL 1-WAY FULL SCAN OVER ALARM_RECORD_01  | null            | null           | null         |
    |     SERVER FILTER BY ROW_KEY = '1001820361582523029000'       | null            | null           | null         |
    +---------------------------------------------------------------+-----------------+----------------+--------------+
    3 rows selected (0.025 seconds)
    
    0: jdbc:phoenix:192.168.10.10:2181> DELETE FROM alarm_record_01 WHERE row_key = '1001820361582523029000';
    1 row affected (0.951 seconds)