1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MySQL EXPLAN优化成本常数简介

MySQL EXPLAN优化成本常数简介

时间:2020-07-29 14:51:47

相关推荐

MySQL EXPLAN优化成本常数简介

文章目录

前言一、server层常数二、存储引擎层常数总结

前言

MySQL运行分为两层,Server层以及存储引擎层。

Server层进行连接管理,查询缓存,语法解析,查询优化等操作;存储引擎层执行具体的数据存取操作;

两者执行成本是相互独立互不影响的,计算优化成本的常数也分为两类


一、server层常数

查询server层常数表:

# mysql库select * from server_cost;+------------------------------+------------+---------------------+---------+| cost_name| cost_value | last_update | comment |+------------------------------+------------+---------------------+---------+| disk_temptable_create_cost | NULL | -12-11 18:02:26 | NULL || disk_temptable_row_cost| NULL | -12-11 18:02:26 | NULL || key_compare_cost | NULL | -12-11 18:02:26 | NULL || memory_temptable_create_cost | NULL | -12-11 18:02:26 | NULL || memory_temptable_row_cost | NULL | -12-11 18:02:26 | NULL || row_evaluate_cost | NULL | -12-11 18:02:26 | NULL |+------------------------------+------------+---------------------+---------+6 rows in set (0.01 sec)

Server层一些操作对应的成本常数:

修改配置之后需要让,mysql重新加载这个配置

UPDATE server_cost SET cost_value = 0.4 WHERE cost_name = 'row_evaluate_cost';# 重新加载这个配置FLUSH OPTIMIZER_COSTS;

如果需要恢复成默认值,只需要将cost_value设置为NULL,然后再重新加载这个配置就可以了

二、存储引擎层常数

查询存储引擎层常数表:

# mysql库SELECT * FROM engine_cost;+-------------+-------------+------------------------+------------+---------------------+---------+| engine_name | device_type | cost_name | cost_value | last_update | comment |+-------------+-------------+------------------------+------------+---------------------+---------+| default| 0 | io_block_read_cost| NULL | -12-11 18:02:26 | NULL || default| 0 | memory_block_read_cost | NULL | -12-11 18:02:26 | NULL |+-------------+-------------+------------------------+------------+---------------------+---------+2 rows in set (0.00 sec)

engine_name:成本常数适用的存储引擎的名称。如果该值为default,则意味着对应成本常数适用于所有的存储引擎。

device_type:存储引擎使用的设备类型。这主要是为了区分常规的机械硬盘和固态硬盘。不过在MySQL5.7.22版本中并没有对机械硬盘,固态硬盘的成本进行区分,所以该值默认是0。

存储引擎层一些操作对应的成本常数:


filesort:排序操作无法使用到索引,只能在内存(数据量较少)或者磁盘(数据量比较多)进行排序。

总结

EXPLAN优化方案的成本都是根据数据查询出来的数据 * 常数,然后抉择之后取成本最低的方案。

参考:《MySQL是怎样运行的》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。