暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql cost成本计算初试

原创 zhou 2024-04-02
180

select * from mysql.server_cost;


20240402163930image.png
select * from mysql.engine_cost;


20240402163921image.png

全表扫描

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’


20240402171558image.png

show table status like ‘employees’\G;


20240402132255image.png

Table scan

explain format=tree SELECT * FROM employees


20240402140853image.png
explain format=json select * from employees;


20240402171142image.png

手工计算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’


20240402185241image.png
show table status like ‘dept_emp’\G;


20240402185407image.png

REF

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


20240402185425image.png
explain format=json select * from dept_emp where dept_no=‘d003’;


20240402185524image.png

手工计算cost

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

eval_cost=33212* 0.1=3321.2

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论