OpenTenBase / OpenTenBase/TXSQL

TXSQL count(expr)优化

オープン
#49 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
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%+。
Image

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. 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

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。