首页 > 其他分享 > StoneDB 子查询优化

StoneDB 子查询优化

时间:2022-10-17 15:01:45浏览次数:72  
标签:JoinAlgType join JTYPE cond common StoneDB Operator 查询 优化

StoneDB 子查询优化

摘要:

说明如何优化 exists 的 join 查询优化器的处理

核心函数:

TwoDimensionalJoiner::ChooseJoinAlgorithm

JoinAlgType TwoDimensionalJoiner::ChooseJoinAlgorithm([[maybe_unused]] MultiIndex &mind, Condition &cond) {
  JoinAlgType join_alg = JoinAlgType::JTYPE_GENERAL;

  if (cond[0].IsType_JoinSimple() && cond[0].op == common::Operator::O_EQ) {
    if ((cond.Size() == 1) && !stonedb_sysvar_force_hashjoin)
      join_alg = JoinAlgType::JTYPE_MAP;  // available types checked inside
    else
      join_alg = JoinAlgType::JTYPE_HASH;
  } else {
    if (cond[0].IsType_JoinSimple() &&
        (cond[0].op == common::Operator::O_MORE_EQ || cond[0].op == common::Operator::O_MORE ||
         cond[0].op == common::Operator::O_LESS_EQ || cond[0].op == common::Operator::O_LESS))
      join_alg = JoinAlgType::JTYPE_SORT;
  }
  return join_alg;
}

选择 join 优化器问题分析:

  1. 仅判定 join simple 场景,未判断 exists 子句
  2. cond [0].IsType_JoinSimple () 如果走入了 else 分支,相当于被执行了两次

file

ChooseJoinAlgorithm 函数优化:

  1. 加入 exists 的判定,以 IsType_JoinSimple 和 == common::Operator:

    标签:JoinAlgType,join,JTYPE,cond,common,StoneDB,Operator,查询,优化
    From: https://www.cnblogs.com/htx666/p/16799211.html

相关文章

  • 操作表_查询与DDL_操作表_创建
    操作表_查询2.操作表1.R(Retrieve):查询查询某个数据库中的所有名称 showtables;   ......
  • linux查询网络路由表
    netstat[root@10-21-0-1~]#netstat-nrKernelIProutingtableDestinationGatewayGenmaskFlagsMSSWindowirttIface0.0.0.0......
  • DDL_操作数据库_创建&查询与DDL_操作数据库_修改&删除&使用
    DDL_操作数据库   1.操作数据库:CRUD1.C(Create):创建createdatabase数据库名称 创建成功......
  • 06.模糊查询
    模糊查询模糊查询使用like关键字和通配符结合来实现,通配符具体含义如下:%:代表匹配0个字符、1个字符或多个字符_:代表匹配有且只有1个字符[]:代表匹配范围内[^]......
  • 09.多表查询
    多表查询一、笛卡尔乘积--笛卡尔乘积--查询结果将People所有记录和Department所有记录依次排列组合形成新的结果select*fromPeople,Department;二、简单的多表查询......
  • 08.分组查询
    分组查询--根据员工所在地区分组,统计员工人数,工资总和,平均工资,最高工资,最低工资--方案1select'武汉'地区,count(*)员工人数,sum(PeopleSalary)工资总和,avg(People......
  • 05.条件查询
    条件查询SQL中常用的运算符=等于,比较是否相等及赋值!=比较不等于>比较大于<比较小于>=比较大于等于<=比较小于等于ISNULL比较为......
  • 04.基本查询
    基本查询--查询所有列所有行--*代表查询所有列,未加限制条件说明查找所有行select*fromDepartmentselect*from[Rank]select*fromPeople--查询员工表中(姓名,性别......
  • 哪些数据类岗位不容易(被优化)失业?
    哪些数据岗位不属于螺丝钉的工作呢?哪些数据岗位更能对抗被优化的风险呢?哪些数据类岗位不容易失业?不失一般性,非研发类企业的数据岗位,其抗风险的能力取决于两个因素,即价值创......
  • 多表查询外连接和多表查询_子查询概述
    多表查询外连接:多表查询外连接有两个:一个是左外连接查询,另一个是右外连接查询其实这两个你只需要掌握其中一个就行左外连接查询的例子:SELECTemp.*,dept.`name`FROM......