OpenTenBase / OpenTenBase/TXSQL
TXSQL count(expr)优化
Personne n'a encore pris cette issue.
- Langage dominant
- C++
- Étoiles
- 337
- Forks
- 234
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
在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%+。
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par suivre le traitement de count(expr) à travers les vérifications nullable et is_null de Item dans le moteur SQL, puis suivez la manière dont le moteur de stockage convertit les colonnes en TABLE::record[0]. Vérifiez le comportement pour une colonne NOT NULL située en dehors du côté interne d’un LEFT JOIN, et comparez-le à count(*) ou count(0). Le travail est terminé lorsque le chemin de requête éligible évite le surcoût de conversion des colonnes et reproduit l’amélioration de performances signalée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- cpp, sql
- Domaine
- databases, performance
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 52/100