OpenTenBase / OpenTenBase/TXSQL
TXSQL count(expr)优化
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C++
- Estrellas
- 337
- Forks
- 234
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
在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%+。
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza rastreando el manejo de count(expr) a través de las comprobaciones nullable e is_null de Item en el motor SQL, y luego sigue cómo el motor de almacenamiento convierte las columnas en TABLE::record[0]. Verifica el comportamiento para una columna NOT NULL fuera del lado interno de un LEFT JOIN y compáralo con count(*) o count(0). Se considera terminado cuando la ruta de consulta elegible evita la sobrecarga de conversión de columnas y reproduce la mejora de rendimiento informada.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- cpp, sql
- Área
- databases, performance
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 52/100