关于select查询的问题

我想问一下,select查询时,是一次就把本次select涉及的数据从tikv拿到tidb server做计算,还是分次获取的啊。比如在调执行器open接口时时就把所有数据拿过来了吗?源码看的我有点迷糊

可以看一下101课程的tidb server章节

问题有点宏大,感觉没到点上哦。哥们是想了解tidb select 的流程

select流程大概知道,我是想问如果结果集很大是一次把结果从tikv拿过来还是分批拿的

按region 去拿的

1 个赞

看这个,里面写道:

selectResult 实现了 SelectResult 这个接口,代表了一次查询的所有结果的抽象,计算是以 Region 为单位进行,所以这里全部结果会包含所有涉及到的 Region 的结果。调用 Chunk 方法可以读到一个 Chunk 的数据,通过不断调用 NextChunk 方法,直到 Chunk 的 NumRows 返回 0 就能拿到所有结果。NextChunk 的实现会不断获取每个 Region 返回的 SelectResponse,把结果写入 Chunk。

所以结论是按chunk分批拿结果。

101里有

同想问如果不过做coprocess下推的话,要把每个tikv的数据集都拿到ti server做进一步操作吗

需要学习一下101相关课程

结果集很大也会拿到tidb内存里面,所以很容易oom

需要参考一下董老师的101课程,里面说的很清楚了。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。