全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
分析型数据库

7.1 LM计算引擎执行计划分析

更新时间:2017-10-12 11:29:52

7.1 使用执行计划

在进行一个业务SQL的性能调优,或是查看一个业务SQL的计算成本消耗时,使用explain命令来进行查看是一个很好的选择。iDB Cloud for 分析型数据库中提供图形化的执行计划命令,同时,用户也可以手动使用explain指令进行查看。

explain 语句

分析型数据库支持通过explain语句来查看逻辑计划和物理执行计划,当用户发起一个explain查询到分析型数据库系统后,分析型数据库会抽样一个数据分区来分析执行计划,并以图形方式展现给用户。

explain语句的格式为, explain + select语句, 例如:

  • 简单sql的explain

    1. explain select count(*) from test4dmp.test where id > 0
  • 复杂sql的explain

    1. explain
    2. select student.id, count(*)
    3. from test4dmp.student
    4. inner join test4dmp.grade on student.id =grade.sid
    5. inner join test4dmp.elective on elective.id=student.id
    6. group by student.id
    7. having count(*) > 2
    8. order by student.id
    9. limit 10

返回文本格式

当用户通过查询的方式,想要获取文本格式的explain语句后,将会得到如下的json串:

  • 返回的json格式
    1. | EXPLAIN |
    2. | logical json |
    3. | physical json |
  • 返回格式说明一共会返回2行1列并且列名为EXPLAIN的ResultSet记录。其中第一行为逻辑计划,第二行为物理计划。

  • JSON格式说明

    • Node 代表着唯一的子节点
    • LeftNode 代表左子树
    • RightNode 代表右子树
    • MiddleNode 代表所有的中间子树(多叉执行树), 可以有多个MiddleNode
    • 其余key-value对统一在同层级的Node和*Node节点显示

Explain 逻辑计划详细语义

  • 样例sql

    1. explain
    2. select student.id, count(*)
    3. from test4dmp.student
    4. inner join test4dmp.grade on student.id =grade.sid
    5. inner join test4dmp.elective on elective.id=student.id
    6. group by student.id
    7. having count(*) > 2
    8. order by student.id
    9. limit 10
  • 逻辑计划的explain string

    1. {
    2. "Items": ["student.id", "COUNT(*)"],
    3. "Name": "SelectNode",
    4. "Node": {
    5. "Having": "COUNT(*) > 2",
    6. "Items": ["student.id"],
    7. "Name": "GroupNode",
    8. "Node": {
    9. "Items": ["student.id"],
    10. "Name": "OrderByNode",
    11. "Node": {
    12. "Name": "JoinNode",
    13. "LeftNode": {
    14. "Name": "JoinNode",
    15. "LeftNode": {
    16. "Name": "TableNode",
    17. "Schema": ["ID"],
    18. "TableName": "STUDENT__1"
    19. },
    20. "OnCondition": "student.id = grade.sid",
    21. "RightNode": {
    22. "Name": "TableNode",
    23. "Schema": ["SID"],
    24. "TableName": "GRADE__9"
    25. }
    26. },
    27. "OnCondition": "elective.id = student.id",
    28. "RightNode": {
    29. "Name": "TableNode",
    30. "Schema": ["ID"],
    31. "TableName": "ELECTIVE__1"
    32. }
    33. }
    34. }
    35. },
    36. "Limit:": "LIMIT 100"
    37. }
  • 逻辑计划explain string的图形化展示效果:

  • 逻辑计划各个节点说明:
    • SelectNode表示这select中最终输出表达式的相关信息, 例如select要输出的表达式集合
    • GroupNode表示GroupBy语句的相关信息,例如groupby的列,having的表达式等
    • OrderByNode表示OrderBy的列信息,例如列名,顺序等。
    • JoinNode表示逻辑Join树的信息,例如join的on条件
    • TableNode表示分区表的信息,例如参与计算的列,表名等。

Explain 物理执行计划详细语义

  • 样例sql

    1. explain
    2. select student.id, count(*)
    3. from test4dmp.student
    4. inner join test4dmp.grade on student.id =grade.sid
    5. inner join test4dmp.elective on elective.id=student.id
    6. group by student.id
    7. having count(*) > 2
    8. order by student.id
    9. limit 10
  • 物理计划的explain string

    1. {
    2. "Name": "JoinExecutor",
    3. "isDimension": "false",
    4. "LeftNode": {
    5. "Name": "TableExecutor",
    6. "PresortCondition": "null",
    7. "SecpartCondition": "null",
    8. "QueryColumns": "ID, BOOLEAN_TEST, LONG_TEST",
    9. "FilterCondition": "null",
    10. "ResultRows": 0,
    11. "PartColumn": "ID",
    12. "IsDimension": "false",
    13. "TableName": "TEST__2",
    14. "QueryCondition": "(ID = 0)"
    15. },
    16. "JoinCondition": "TEST__2.ID=TEST__2.ID",
    17. "RightNode": {
    18. "Name": "TableExecutor",
    19. "PresortCondition": "null",
    20. "SecpartCondition": "null",
    21. "QueryColumns": "ID, BOOLEAN_TEST",
    22. "FilterCondition": "null",
    23. "ResultRows": 0,
    24. "PartColumn": "ID",
    25. "IsDimension": "false",
    26. "TableName": "TEST__2",
    27. "QueryCondition": "((INT_TEST < 0) AND (ID = 0))"
    28. },
    29. "JoinType": "innerJoin",
    30. "WhereFilter": "(BOOLEAN_TEST = BOOLEAN_TEST)",
    31. "OnFilter": "null"
    32. }
  • 物理计划explain string的图形化展示效果:

  • 物理计划各个节点说明:
    • JoinExecutor表示Join的节点
      • JoinCondition:join的条件
      • JoinType:join的类型,innerJoin, leftJoin, rightJoin, simiJoin等
      • OnFilter: on上面的过滤条件
      • WhereFilter: where里面的过滤条件(只有leftjoin中on和where的条件才有差异)
      • IsDimension:该Join子树中是否含有维度表
    • TableExecutor表示参与计算的表信息
      • FilterCondition: 该表参与过滤计算的表达上(不能下沉索引的表达式)
      • IsDimension:该表是否是维度表
      • PartColumn:一级分区列
      • SecPartColumn:二级分区列
      • QueryColumns: 参与计算的列数(下沉索引计算的列不包含在此之内)
      • QueryCondition: 索引条件
      • ResultRows: 该节点预估cost
      • PresortCondition: 预排序条件,可以用做优先索引条件下沉
      • SecpartCondition:二级分区筛选条件,可以用做二级分区筛选。
      • TableName: 分区表名
本文导读目录