一. 前言
在openGauss中,TidScan是指过滤谓词中包含ctid信息时,不再全表扫描然后通过eqal比对的方式进行计划,而是通过那到ctid谓词,直接通过tid获取到元组,然后再应用其他的过滤条件来过滤通过ticd获取到的元组。如下所示:
本文主要讲述代码中是如何实现tidscan的。
二. 执行计划生成
执行计划生成的入口在set_plain_rel_pathlist,如下为主要的代码实现流程:
set_plain_rel_pathlist
if (rel->orientation == REL_ROW_ORIENTED)
create_tidscan_paths(root, rel);
tidquals = TidQualFromBaseRestrictinfo(rel);
foreach (l, rel->baserestrictinfo) {
rlst = TidQualFromExpr((Node*)rinfo->clause, rel->relid);
if (is_opclause(expr)) { // 等于类型的谓词条件
if (IsTidEqualClause((OpExpr*)expr, varno)) // 判断是不是谓词意见是ctid=xxx