开发者社区> 问答> 正文

OceanBase数据库sql执行时,哪个方法是从磁盘读取数据,并放到ObResultSet中的呢?

OceanBase数据库sql执行时,会将查询结果存到ObResultSet结构中,再返回给调用者。在哪个方法中,从磁盘读取数据,并放到ObResultSet中的呢,是在ObSql::code_generate中吗?

展开
收起
2401。 2023-10-06 11:15:18 116 0
来自:OceanBase
5 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在OceanBase数据库中,当SQL执行时,会将查询结果存到ObResultSet结构中,并返回给调用者。这个过程通常在ObSql::code_generate方法中完成。在这个方法中,OceanBase会解析SQL语句,并生成相应的执行代码。在生成执行代码的过程中,OceanBase会将查询结果存到ObResultSet结构中。
    但是,ObResultSet结构中的数据是从哪里读取的呢?实际上,ObResultSet结构中的数据是从磁盘中读取的。在执行SQL语句时,OceanBase会将查询结果写入到磁盘中。然后,当需要返回查询结果时,OceanBase会从磁盘中读取这些数据,并存放到ObResultSet结构中。

    2023-10-08 21:49:48
    赞同 展开评论 打赏
  • 月移花影,暗香浮动

    在OceanBase数据库中,查询结果的存储和管理涉及多个组件和模块。对于将查询结果存放到ObResultSet结构并返回给调用者的过程,一般会涉及以下几个关键步骤:

    SQL解析与优化:首先,OceanBase会接收并解析SQL查询语句,然后根据解析结果生成执行计划。这个过程在ObSql类的parse和optimize方法中完成。
    执行查询计划:然后,根据生成的执行计划,OceanBase会执行查询操作并获取查询结果。这个过程涉及到与存储引擎交互的底层操作,通常在ObSql类的code_generate方法中进行。
    结果封装:当查询结果返回后,OceanBase会将结果封装到ObResultSet中。这个封装过程一般会在ObSql类的get_result方法中完成。
    在这个过程中,从磁盘读取数据并放到ObResultSet中的操作主要发生在执行查询计划的阶段。具体来说,这个操作是在底层存储引擎中完成的,它负责从磁盘读取数据页并解析成所需的格式。

    因此,可以说在ObSql类的code_generate方法中,会涉及到从磁盘读取数据并放到ObResultSet中的操作,但这个操作是在底层存储引擎中完成的。此外,还需要注意的是,具体的实现细节可能会因为OceanBase的版本、配置和优化策略而有所不同。

    2023-10-08 17:14:31
    赞同 展开评论 打赏
  • OceanBase数据库sql执行时,从磁盘读取数据并放到ObResultSet中的方法是在ObSql::execute方法中。该方法首先会解析SQL语句,然后根据解析结果从磁盘中读取数据,并将数据存储到ObResultSet结构中。最后,将ObResultSet返回给调用者。

    2023-10-06 17:09:15
    赞同 展开评论 打赏
  • 在OceanBase数据库中,查询结果的生成和缓存是在ObExecUtils中完成的。具体来说,是在ObExecUtils::execute_sql函数中,查询结果会被存储在ObResultSet结构中,然后返回给调用者。

    ObExecUtils::execute_sql函数的主要功能是执行SQL语句,并返回查询结果。在这个函数中,它会首先解析SQL语句,然后生成执行计划,最后执行SQL语句并获取查询结果。在这个过程中,它会根据SQL语句的类型(如SELECT、INSERT、UPDATE等)选择合适的方法来获取查询结果。

    对于SELECT语句,ObExecUtils::execute_sql函数会调用ObExecutor::fetch_next_row函数来获取每一行的数据。在这个函数中,它会从磁盘读取数据,并放到ObResultSet结构中。

    2023-10-06 15:48:31
    赞同 展开评论 打赏
  • OceanBase数据库在执行SQL查询时,将查询结果存储到ObResultSet结构中的过程涉及到多个步骤和方法。

    首先,当客户端(如MySQL客户端)向OceanBase发送SQL查询请求时,该请求会先经过ObProxySQLClient的解析和优化,然后由ObExecutor进行执行。

    在ObExecutor中,查询执行的主要逻辑是在ObExecUtil中的execute_one_stmt方法中完成的。该方法会根据执行的SQL语句的类型(如SELECT、INSERT、UPDATE等),调用相应的函数来处理。对于SELECT语句,它会调用ObMTSQLProcessor的process_select_stmt方法。

    在ObMTSQLProcessor的process_select_stmt方法中,会生成对应的执行计划(Execution Plan),并调用ObPhysicalPlan的build_physical_plan方法来构建物理执行计划。接下来,物理执行计划会被分发到相应的数据节点(Data Node)上进行实际的数据处理和查询操作。

    在处理查询操作的过程中,数据会被缓存在内存中,直到结果集(ObResultSet)被创建。在ObMTSQLProcessor的get_result_set方法中,会根据物理执行计划中的信息,创建结果集并将数据填充到其中。最后,结果集会被返回给客户端。

    从磁盘读取数据并放到ObResultSet中的过程并非在ObSql::code_generate中完成,而是在ObMTSQLProcessor的process_select_stmt和get_result_set方法中完成的。

    2023-10-06 11:42:14
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
蚂蚁OceanBase数据库团队,用于OceanBase技术原理、运维经验和案例分享、对外交流。
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载