TiDB统计信息中,如何获取Join算子的Selectivity?(统计信息,算子代价)

统计信息,算子代价
在进行CBO优化时,需要知道算子的开销,即rowcount和selectivity,我想知道Join算子的Selectivity是如何计算出来的?
我阅读了《 TiDB 源码阅读系列文章(十二)统计信息》系列文章,同时查看了Selectivity.go的源码,但是发现Selectivity.go仅仅是针对某一列的统计信息,结合filter计算出Selectivity,仅涉及到tablescan算子。

所以,具体来说,我想了解一下:
1、是否会针对join等算子计算其对应的Selectivity?
2、如果有,在哪个文件实现的逻辑?

十分感谢!

确实会针对 Join 算子计算选择性,CBO 会根据连接条件的类型和列的统计信息来估算 Join 的选择性。相关的计算逻辑分布在多个文件中,主要包括 cost/optimizer.goplanner/core/planbuilder.gostatistics/selectivity.go 等。你查看这些文件了解 TiDB 如何使用统计信息来优化 Join 算子的选择性估算和最终的查询执行计划。

1 个赞