mysql cost成本计算初试

select * from mysql.server_cost;

mysql cost成本计算初试-每日运维
mysql cost成本计算初试-每日运维
select * from mysql.engine_cost;

mysql cost成本计算初试-每日运维

全表扫描

IO cost = pages in table * io_block_read_cost 物理磁盘读

IO cost =pages in table * memory_block_read_cost

CPU cost = records * row_evaluate_cost

const double pages_in_mem = pages * in_mem;
const double pages_on_disk = pages - pages_in_mem;

const double cost =
buffer_block_read_cost(pages_in_mem) + io_block_read_cost(pages_on_disk);

IO成本=页面数 * 1 + 1.1
CPU成本=总行数 * 0.1

统计信息

select * from mysql.innodb_index_stats
where database_name=‘employees’ and table_name=‘employees’

mysql cost成本计算初试-每日运维

show table status like ‘employees’G;

mysql cost成本计算初试-每日运维

Table scan

explain format=tree SELECT * FROM employees

mysql cost成本计算初试-每日运维
mysql cost成本计算初试-每日运维
explain format=json select * from employees;

mysql cost成本计算初试-每日运维

手工计算cost

read_cost= 929 * 1.0=929

read_cost= 929 * 0.25=232.25

eval_cost=299866 * 0.1=29986.6

REF查找

IO成本=扫描的行记录数 * 1
CPU成本=扫描的行记录数 * 0.1

统计信息

select * from mysql.innodb_index_stats
where database_name=‘employees’ and table_name=‘dept_emp’

mysql cost成本计算初试-每日运维
mysql cost成本计算初试-每日运维
show table status like ‘dept_emp’G;

mysql cost成本计算初试-每日运维

REF

explain format=tree select * from dept_emp where dept_no=‘d003’

mysql cost成本计算初试-每日运维
mysql cost成本计算初试-每日运维
explain format=json select * from dept_emp where dept_no=‘d003’;

mysql cost成本计算初试-每日运维

手工计算cost

read_cost= (353+737)* (33212/331962) * 1.0+ =109.05 +?

eval_cost=33212* 0.1=3321.2

对于ref查询 read_cost不知道确实少了哪部分,回表也计算了