OpenTenBase / OpenTenBase/TXSQL
TXSQL count(expr)优化
还没有人认领这个 Issue。
- 主要语言
- C++
- 星标
- 338
- 派生
- 235
- PR 合并指标
- 30 天内没有已合并 PR
描述
在TXSQL中,count star会转换为count(0),count star、count(0)、count(1)等价,表示计数时包含null值。而count(col)则不包含null值。
在存储引擎,count(col)需要转换col列到TABLE::record[0]中,因此存在格式转换开销。而count(0)不存在额外需要拷贝的列。
在SQL engine,通过Item判断nullable属性以及is_null属性。
如果count(expr)中的expr能够在优化阶段提前确定绝对不会为null,比如count(t.col),t不是left join内表,同时col定义为not null。此时
count(expr)实际可以转换为count star,从而也当作count(0)处理。从而可以减少格式转换开销。
下面是一个简单的测试:其中l_shipdate列定义为not null,而格式转换开销的消除使得查询变快了15%+。
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先,跟踪 SQL 引擎中 count(expr) 经过 Item 的 nullable 和 is_null 检查时的处理流程,然后继续跟踪存储引擎如何将列转换为 TABLE::record[0]。验证位于 LEFT JOIN 内侧之外的 NOT NULL 列的行为,并将其与 count(*) 或 count(0) 进行比较。当符合条件的查询路径避免列转换开销并重现所报告的性能提升时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- cpp, sql
- 领域
- databases, performance
- Issue 类型
- 功能
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 52/100