概述
将UQL查询提交至嬴图系统后,首先需经过解析验证其语法。解析完成后,查询将进入优化阶段,嬴图会根据数据库的当前状态评估潜在的执行策略。
嬴图的查询优化器将基于数据分布、索引和潜在瓶颈等情况,选择最有效的执行计划。该执行计划将展示操作的最佳顺序,最大限度减少资源消耗并提升查询性能。
UQL查询的生命周期
解释执行计划
使用前缀EXPLAIN
可在不执行UQL查询的情况下查看其执行计划。该操作生成一个详细的操作树,概述查询进程中所需的每个步骤。
以下查询的执行计划包含运算符NodeSearch
、Template
、Aggregate
、Exchange
、Aggregate
和With
:
explain
n({@movie} as m).e().n({@country.name == "US"}) as p
group by m.genre
return m.genre, count(m)
Return(ROOT){expr:[m.genre,count(m)] row_type:m.genre:ANY<?>,count(m):UINT64}
-> With{exprs:[count(m),m],row_type:count(m):UINT64,m:ANY}
-> Aggregate{key:[m.genre],agg:[sum(#agg_25_0) as count(m),anyValue(#agg_25_1) as m],phase:GLOBAL_MERGE,row_type:m.genre:STRING,count(m):UINT64,m:NODE{genre:STRING}}
-> Exchange{distribution:distribution_type:ANY,filter:(is_schema,m,movie,5,NODE),partition_ids:[1,2,3],gap_type:APPLY_ALGO}
-> Aggregate{key:[m.genre],agg:[count(m) as #agg_25_0,anyValue(m) as #agg_25_1],phase:PARTIAL,row_type:m.genre:STRING,#agg_25_0:UINT64,#agg_25_1:NODE{genre:STRING}}
-> Template::PARTIAL{row_type:p:PATH{{}{}},m:NODE{genre:STRING},alias:p,shortest:0,no_circle:0,turbo:0,using_temp_value:0,count_row:0,limit:18446744073709551615,deduplicate:1,path:node{direction:IN_OUT,step_num:(1,1),f:m as m},edge{direction:IN_OUT,step_num:(1,1),f:{(ANY) as #hidden_3}},node{direction:IN_OUT,step_num:(1,1),f:{(eq,#hidden_4.country(NODE4).name,US) as #hidden_4}}}
-> NodeSearch{alias:m,row_type:m:NODE{genre:STRING},access_method:{condition:@movie,index_name:schema,query_type:SK_SCHEMA_SCAN}}
EXPLAIN
功能展示了操作的结构和顺序,有助于分析查询的性能影响。有了这种预览,您可在执行完整查询前进行调整,以实现更高效率,对优化查询非常重要。