OpenTenBase / OpenTenBase/TXSQL
TXSQL count(expr)优化
まだ誰も着手していません。
- 主要言語
- C++
- スター
- 337
- フォーク
- 234
- 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 にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、SQL エンジンにおける Item の nullable および is_null チェックを通じて count(expr) の処理を追跡し、次にストレージエンジンがどのようにカラムを TABLE::record[0] に変換するかを追跡します。LEFT JOIN の内部側の外部にある NOT NULL カラムについて動作を確認し、count(*) または count(0) と比較します。対象となるクエリパスがカラム変換のオーバーヘッドを回避し、報告されたパフォーマンス向上を再現できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp, sql
- 領域
- databases, performance
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 52/100