为了提高用户在使用 OceanBase 社区版过程中解决问题的效率,前一阵儿 OceanBase 官方推出了 《OceanBase DBA 从入门到实践》系列课程。但是在第七期直播之后,很多用户都反馈在阅读学习笔记的过程中,无法理解计划里类似于 rowset=16 或者 rowset=256 这样的信息所表示的含义。
obclient [test]> create table t1(c1 int, c2 int);
Query OK, 0 rows affected (0.203 sec)
obclient [test]> explain select count(*) from t1 where c1 = 1000;
+------------------------------------------------------------------------------------+
| Query Plan |
+------------------------------------------------------------------------------------+
| ================================================= |
| |ID|OPERATOR |NAME|EST.ROWS|EST.TIME(us)| |
| ------------------------------------------------- |
| |0 |SCALAR GROUP BY | |1 |4 | |
| |1 |└─TABLE FULL SCAN|t1 |1 |4 | |
| ================================================= |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=16 |
| group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]) |
| 1 - output([T_FUN_COUNT(*)]), filter([t1.c1 = 1000]), rowset=16 |
| access([t1.c1]), partitions(p0) |
| is_index_back=false, is_global_index=false, filter_before_indexback[false], |
| range_key([t1.__pk_increment]), range(MIN ; MAX)always true |
+------------------------------------------------------------------------------------+
14 rows in set (0.033 sec)
计划里的 rowset 信息和 OceanBase 执行引擎的向量化执行技术相关,我们写了一篇博客,在解答这个用户问题的同时,也顺便大家介绍一下 OceanBase 执行引擎的向量化执行技术,详见:《从行到向量 —— 数据库执行引擎的进化之路》。
这篇博客是偏数据库系统概念性的内容,但是不会深入到 OceanBase 中各个算子和表达式的在向量化中的详细设计和实现,大家都能看懂,可以放心阅读~
最后附上两个链接,供大家学习和参考: