51
小米MIX
7.1 使用執行計劃調優__第七章 性能優化和診斷_使用手冊_分析型數據庫-阿裏雲
在進行一個業務SQL的性能調優,或是查看一個業務SQL的計算成本消耗時,使用explain命令來進行查看是一個很好的選擇。iDB Cloud for 分析型數據庫中提供圖形化的執行計劃命令,同時,用戶也可以手動使用explain指令進行查看。
explain 語句
分析型數據庫支持通過explain語句來查看邏輯計劃和物理執行計劃,當用戶發起一個explain查詢到分析型數據庫係統後,分析型數據庫會抽樣一個數據分區來分析執行計劃,並以圖形方式展現給用戶。
explain語句的格式為, explain + select語句, 例如:
簡單sql的explain
explain select count(*) from test4dmp.test where id > 0
複雜sql的explain
explain select student.id, count(*) from test4dmp.student inner join test4dmp.grade on student.id =grade.sid inner join test4dmp.elective on elective.id=student.id group by student.id having count(*) > 2 order by student.id limit 10
返回文本格式
當用戶通過查詢的方式,想要獲取文本格式的explain語句後,將會得到如下的json串:
- 返回的json格式
| EXPLAIN | | logical json | | physical json |
返回格式說明 一共會返回2行1列並且列名為
EXPLAIN
的ResultSet記錄。其中第一行為邏輯計劃,第二行為物理計劃。JSON格式說明
Node
代表著唯一的子節點LeftNode
代表左子樹RightNode
代表右子樹MiddleNode
代表所有的中間子樹(多叉執行樹), 可以有多個MiddleNode- 其餘
key-value
對統一在同層級的Node和*Node
節點顯示
Explain 邏輯計劃詳細語義
樣例sql
explain select student.id, count(*) from test4dmp.student inner join test4dmp.grade on student.id =grade.sid inner join test4dmp.elective on elective.id=student.id group by student.id having count(*) > 2 order by student.id limit 10
邏輯計劃的explain string
{ "Items": ["student.id", "COUNT(*)"], "Name": "SelectNode", "Node": { "Having": "COUNT(*) > 2", "Items": ["student.id"], "Name": "GroupNode", "Node": { "Items": ["student.id"], "Name": "OrderByNode", "Node": { "Name": "JoinNode", "LeftNode": { "Name": "JoinNode", "LeftNode": { "Name": "TableNode", "Schema": ["ID"], "TableName": "STUDENT__1" }, "OnCondition": "student.id = grade.sid", "RightNode": { "Name": "TableNode", "Schema": ["SID"], "TableName": "GRADE__9" } }, "OnCondition": "elective.id = student.id", "RightNode": { "Name": "TableNode", "Schema": ["ID"], "TableName": "ELECTIVE__1" } } } }, "Limit:": "LIMIT 100" }
邏輯計劃explain string的圖形化展示效果:
- 邏輯計劃各個節點說明:
- SelectNode表示這select中最終輸出表達式的相關信息, 例如select要輸出的表達式集合
- GroupNode表示GroupBy語句的相關信息,例如groupby的列,having的表達式等
- OrderByNode表示OrderBy的列信息,例如列名,順序等。
- JoinNode表示邏輯Join樹的信息,例如join的on條件
- TableNode表示分區表的信息,例如參與計算的列,表名等。
Explain 物理執行計劃詳細語義
樣例sql
explain select student.id, count(*) from test4dmp.student inner join test4dmp.grade on student.id =grade.sid inner join test4dmp.elective on elective.id=student.id group by student.id having count(*) > 2 order by student.id limit 10
物理計劃的explain string
{ "Name": "JoinExecutor", "isDimension": "false", "LeftNode": { "Name": "TableExecutor", "PresortCondition": "null", "SecpartCondition": "null", "QueryColumns": "ID, BOOLEAN_TEST, LONG_TEST", "FilterCondition": "null", "ResultRows": 0, "PartColumn": "ID", "IsDimension": "false", "TableName": "TEST__2", "QueryCondition": "(ID = 0)" }, "JoinCondition": "TEST__2.ID=TEST__2.ID", "RightNode": { "Name": "TableExecutor", "PresortCondition": "null", "SecpartCondition": "null", "QueryColumns": "ID, BOOLEAN_TEST", "FilterCondition": "null", "ResultRows": 0, "PartColumn": "ID", "IsDimension": "false", "TableName": "TEST__2", "QueryCondition": "((INT_TEST < 0) AND (ID = 0))" }, "JoinType": "innerJoin", "WhereFilter": "(BOOLEAN_TEST = BOOLEAN_TEST)", "OnFilter": "null" }
物理計劃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: 分區表名
- JoinExecutor表示Join的節點
最後更新:2016-11-24 11:23:46
上一篇:
6.3 使用ACL進行權限管理__第六章 用戶與權限_使用手冊_分析型數據庫-阿裏雲
下一篇:
7.2 查看DB性能指標和報告__第七章 性能優化和診斷_使用手冊_分析型數據庫-阿裏雲
虛擬主機被搜索引擎爬蟲訪問耗費大量流量解決方法___安全問題_技術分享_雲虛機主機-阿裏雲
本地PostgreSQL遷移至RDS for PostgreSQL__數據遷移_用戶指南_數據傳輸-阿裏雲
升降配__購買實例_購買指南_雲服務器 ECS-阿裏雲
OSS錯誤響應__API 參考_對象存儲 OSS-阿裏雲
類型1:圖片小文件加速__用戶指南_CDN-阿裏雲
1.2 3步完成建表__1. RDS快速開始_數據庫RDS 體驗_體驗館-阿裏雲
公共錯誤碼__調用方式_API文檔_批量計算-阿裏雲
阿裏雲躋身全球雲計算前三憑什麼?
操作匯總__API 概覽_API 參考_表格存儲-阿裏雲
ModifyLoadBalancerInternetSpec__LoadBalancer相關API_API 參考_負載均衡-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲