自己实现数据库(4)优化器

作者 chauncy 日期 2020-04-07
db
自己实现数据库(4)优化器

自己实现数据库(4)优化器

join cast

核心

类 JoinOptimizer

public double estimateJoinCost(LogicalJoinNode j, int card1, int card2,
double cost1, double cost2) {
if (j instanceof LogicalSubplanJoinNode) {
return card1 + cost1 + cost2;
} else {
// TODO IMPORTANT compare IO cost with CPU cost
/*
* joincost(t1 join t2) = scancost(t1) + ntups(t1) x scancost(t2) //IO cost
* + ntups(t1) x ntups(t2) //CPU cost
*/
// Insert your code here.
// HINT: You may need to use the variable "j" if you implemented
// a join algorithm that's more complicated than a basic
// nested-loops join.
return cost1 + card1 * cost2 + card1 * card2;
}
}

这个是评估 join 的cost

joincost(t1 join t2) = (io cost + cpu cost ) scancost(t1) + ntups(t1) x scancost(t2) + ntups(t1) x ntups(t2)

这些 cost 的计算就是需要统计信息 IntHistogram 直方图

点击这里查看查询优化器