Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
0ea34286
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
0ea34286
编写于
8月 08, 2023
作者:
D
dapan1121
提交者:
GitHub
8月 08, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #22301 from taosdata/feat/3.0/TD-25394
feat: optimize table merge scan when 1 child table
上级
44717ddb
632f5fbe
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
42 addition
and
7 deletion
+42
-7
source/libs/executor/inc/tsort.h
source/libs/executor/inc/tsort.h
+2
-0
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+11
-6
source/libs/executor/src/tsort.c
source/libs/executor/src/tsort.c
+29
-1
未找到文件。
source/libs/executor/inc/tsort.h
浏览文件 @
0ea34286
...
...
@@ -191,6 +191,8 @@ int32_t getProperSortPageSize(size_t rowSize, uint32_t numOfCols);
bool
tsortIsClosed
(
SSortHandle
*
pHandle
);
void
tsortSetClosed
(
SSortHandle
*
pHandle
);
void
setSingleTableMerge
(
SSortHandle
*
pHandle
);
#ifdef __cplusplus
}
#endif
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
0ea34286
...
...
@@ -2938,17 +2938,22 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) {
// one table has one data block
int32_t
numOfTable
=
tableEndIdx
-
tableStartIdx
+
1
;
STableMergeScanSortSourceParam
param
=
{
0
}
;
param
.
pOperator
=
pOperator
;
STableMergeScanSortSourceParam
*
param
=
taosMemoryCalloc
(
1
,
sizeof
(
STableMergeScanSortSourceParam
))
;
param
->
pOperator
=
pOperator
;
STableKeyInfo
*
startKeyInfo
=
tableListGetInfo
(
pInfo
->
base
.
pTableListInfo
,
tableStartIdx
);
pAPI
->
tsdReader
.
tsdReaderOpen
(
pHandle
->
vnode
,
&
pInfo
->
base
.
cond
,
startKeyInfo
,
numOfTable
,
pInfo
->
pReaderBlock
,
(
void
**
)
&
pInfo
->
base
.
dataReader
,
GET_TASKID
(
pTaskInfo
),
false
,
NULL
);
SSortSource
*
ps
=
taosMemoryCalloc
(
1
,
sizeof
(
SSortSource
));
ps
->
param
=
&
param
;
ps
->
onlyRef
=
tru
e
;
ps
->
param
=
param
;
ps
->
onlyRef
=
fals
e
;
tsortAddSource
(
pInfo
->
pSortHandle
,
ps
);
int32_t
code
=
tsortOpen
(
pInfo
->
pSortHandle
);
int32_t
code
=
TSDB_CODE_SUCCESS
;
if
(
numOfTable
==
1
)
{
setSingleTableMerge
(
pInfo
->
pSortHandle
);
}
else
{
code
=
tsortOpen
(
pInfo
->
pSortHandle
);
}
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
T_LONG_JMP
(
pTaskInfo
->
env
,
terrno
);
...
...
@@ -3587,4 +3592,4 @@ static void destoryTableCountScanOperator(void* param) {
taosArrayDestroy
(
pTableCountScanInfo
->
stbUidList
);
taosMemoryFreeClear
(
param
);
}
\ No newline at end of file
}
source/libs/executor/src/tsort.c
浏览文件 @
0ea34286
...
...
@@ -69,8 +69,14 @@ struct SSortHandle {
_sort_fetch_block_fn_t
fetchfp
;
_sort_merge_compar_fn_t
comparFn
;
SMultiwayMergeTreeInfo
*
pMergeTree
;
bool
singleTableMerge
;
};
void
setSingleTableMerge
(
SSortHandle
*
pHandle
)
{
pHandle
->
singleTableMerge
=
true
;
}
static
int32_t
msortComparFn
(
const
void
*
pLeft
,
const
void
*
pRight
,
void
*
param
);
// | offset[0] | offset[1] |....| nullbitmap | data |...|
...
...
@@ -1453,6 +1459,26 @@ static STupleHandle* tsortPQSortNextTuple(SSortHandle* pHandle) {
return
&
pHandle
->
tupleHandle
;
}
static
STupleHandle
*
tsortSingleTableMergeNextTuple
(
SSortHandle
*
pHandle
)
{
if
(
1
==
pHandle
->
numOfCompletedSources
)
return
NULL
;
if
(
pHandle
->
tupleHandle
.
pBlock
&&
pHandle
->
tupleHandle
.
rowIndex
+
1
<
pHandle
->
tupleHandle
.
pBlock
->
info
.
rows
)
{
pHandle
->
tupleHandle
.
rowIndex
++
;
}
else
{
if
(
pHandle
->
tupleHandle
.
rowIndex
==
-
1
)
return
NULL
;
SSortSource
**
pSource
=
taosArrayGet
(
pHandle
->
pOrderedSource
,
0
);
SSortSource
*
source
=
*
pSource
;
SSDataBlock
*
pBlock
=
pHandle
->
fetchfp
(
source
->
param
);
if
(
!
pBlock
||
pBlock
->
info
.
rows
==
0
)
{
setCurrentSourceDone
(
source
,
pHandle
);
pHandle
->
tupleHandle
.
pBlock
=
NULL
;
return
NULL
;
}
pHandle
->
tupleHandle
.
pBlock
=
pBlock
;
pHandle
->
tupleHandle
.
rowIndex
=
0
;
}
return
&
pHandle
->
tupleHandle
;
}
int32_t
tsortOpen
(
SSortHandle
*
pHandle
)
{
if
(
pHandle
->
opened
)
{
return
0
;
...
...
@@ -1470,7 +1496,9 @@ int32_t tsortOpen(SSortHandle* pHandle) {
}
STupleHandle
*
tsortNextTuple
(
SSortHandle
*
pHandle
)
{
if
(
pHandle
->
pBoundedQueue
)
if
(
pHandle
->
singleTableMerge
)
return
tsortSingleTableMergeNextTuple
(
pHandle
);
else
if
(
pHandle
->
pBoundedQueue
)
return
tsortPQSortNextTuple
(
pHandle
);
else
return
tsortBufMergeSortNextTuple
(
pHandle
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录