概述
将UQL查询提交至嬴图系统后,首先需经过解析验证其语法。解析完成后,查询将进入优化阶段,嬴图会根据数据库的当前状态评估可能的执行策略。
嬴图的查询优化器将基于数据分布、索引和潜在瓶颈等情况,选择最有效的执行计划。该执行计划将展示操作的最佳顺序,最大限度减少资源消耗并提升查询性能。

UQL查询生命周期
给查询语句加EXPLAIN
或PROFILE
前缀可检查一个查询的执行计划。
EXPLAIN
EXPLAIN
生成查询的执行计划,但不实际运行查询。它提供详细的执行运算符树,概述查询引擎检索所需结果所采取的步骤。
explain
find().nodes({@account}) as n
return n.name limit 10
输出是执行计划的结构化表示,通常称为_explain
。
Exchange{1}{distribution:distribution_type:SINGLETON,partition_ids:[1],gap_type:ROOT} :: n.name:ANY
-> Return(ROOT){expr:[n.name] row_type:n.name:ANY}
-> Return(ROOT){expr:[n.name] row_type:n.name:ANY}
-> Limit{limit:10,phase:DEFAULT,row_type:n.name:ANY}
-> NodeSearch{alias:n,access_method:{condition:@account,index_name:schema,query_type:SK_SCHEMA_SCAN},row_type:n:NODE{name:STRING}}
PROFILE
PROFILE
会运行查询,返回查询结果以及一个profile_info
表。此表包括使用的执行运算符、每个运算符生成的行数以及每个步骤的耗时等信息。
profile
find().nodes({@account}) as n
return n.name limit 10
输出的profile_info
示例:
level | op_name | op_id | time_cost | rows |
---|---|---|---|---|
--1 | RETURN | 1 | 17μs | 121 |
----2 | RETURN | 2 | 8μs | 121 |
------3 | LIMIT_SKIP | 3 | 1μs | 121 |
--------4 | NODE_SCAN | 4 | 440μs | 121 |