基本概念
SQL执行器是PolarDB-X Server中执行逻辑层算子的组件。对于简单点查SQL,往往可以整体下推存储层MySQL执行,因而感觉不到执行器的存在,MySQL的结果经过简单的解包封包又被回传给用户。但是对于较复杂的SQL,往往无法将SQL中的算子全部下推,这时候就需要PolarDB-X执行器做完无法下推的那部分计算。
例如,对于如下查询SQL:
SELECT l_orderkey,sum(l_extendedprice*(1-l_discount))AS revenue
FROM CUSTOMER,ORDERS,LINEITEM
WHERE c_mktsegment='AUTOMOBILE'
andc_custkey=o_custkey
andl_orderkey=o_orderkey
ando_orderdate
andl_shipdate>'1995-03-13'
GROUP BY l_orderkey;
通过EXPLAIN命令看到PolarDB-X的执行计划如下:
HashAgg(group="l_orderkey",revenue="SUM(*)")
HashJoin(condition="o_custkey = c_custkey",type="inner")
Gather(concurrent=true)
LogicalView(tables="ORDERS_[0-7],LINEITEM_[0-7]",shardCount=8,sql="SELECT `ORDERS`.`o_custkey`, `LINEITEM`.`l_orderkey`, (`LINEITEM`.`l_extendedprice` * (? - `LINEITEM`.`l_discount`)) AS `x` FROM `ORDERS` AS `ORDERS` INNER JOIN `LINEITEM` AS `LINEITEM` ON (((`ORDERS`.`o_orderkey` = `LINEITEM`.`l_orderkey`) AND (`ORDERS`.`o_orderdate` < ?)) AND (`LINEITEM`.`l_shipdate` > ?))")
Gather(concurrent=true)
LogicalView(tables="CUSTOMER_[0-7]",shardCount=8,sql="SELECT `c_custkey` FROM &#