OpenTenBase / OpenTenBase/TXSQL
TXSQL count(expr)优化
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%+。
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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