当MYSQL通过方法Optimize_table_order :: calculate_scan_cost(const JOIN_TAB * tab,....)计算扫描成本时,我们知道成本不包括执行期间未过滤掉的行的CPU成本方法评论。 所以通过减去rows_after_filtering来计算成本,如下面所示:
scan_and_filter_cost= prefix_rowcount *
(tab->quick()->cost_est.total_cost() +
cost_model->row_evaluate_cost(tab->found_records -
*rows_after_filtering));
scan_and_filter_cost= prefix_rowcount *
(single_scan_read_cost +
cost_model->row_evaluate_cost(tab->records() - *rows_after_filtering));
我的问题是,为什么成本不包括未过滤掉的行在执行期间的CPU成本?它应该包含在我的脑海里。
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_planner.cc#L712