OpenTenBase / OpenTenBase/TXSQL

TXSQL count(expr)优化

Offen
#49 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
C++
Sterne
337
Forks
234
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

在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

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die Verarbeitung von count(expr) durch die nullable- und is_null-Prüfungen von Item in der SQL-Engine nachzuverfolgen, und verfolge dann, wie die Storage Engine Spalten in TABLE::record[0] umwandelt. Überprüfe das Verhalten für eine NOT NULL-Spalte außerhalb der inneren Seite eines LEFT JOIN und vergleiche es mit count(*) oder count(0). Als erledigt gilt die Aufgabe, wenn der geeignete Abfragepfad den Overhead der Spaltenkonvertierung vermeidet und die gemeldete Leistungsverbesserung reproduziert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
cpp, sql
Bereich
databases, performance
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
52/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.