文章目录

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

前言

MySQL运行分为两层,Server层以及存储引擎层。
Server层进行连接管理,查询缓存,语法解析,查询优化等操作;存储引擎层执行具体的数据存取操作;
两者执行成本是相互独立互不影响的,计算优化成本的常数也分为两类


一、server层常数

查询server层常数表:

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

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

成本常数名称 默认值 描述
disk_temptable_create_cost 40.0 创建基于磁盘的临时表的成本。如果增大这个值,则会让查询优化器尽可能少地创建基于磁盘的临时表
disk_temptable_row_cost 1.0 向基于磁盘的临时表写入或读取一条记录的成本。如果增大这个值,则会让查询优化器尽可能少地创建基于磁盘的临时表
key_compare_cost 0.1 两条记录进行比较操作的成本,多用在排序操作中。如果增大这个值,则会提升filesort的成本,从而让查询优化器更倾向于使用索引(而不是filesort)完成排序
memory_temptable_create_cost 2.0 创建基于内存的临时表的成本。如果增大这个值,则会让查询优化器尽可能少地创建基于内存的临时表
memory_temptable_row_cost 0.2 向基于内存的临时表写入或读取一条记录的成本。如果增大这个值,则会让查询优化器尽可能少地创建基于内存的临时表
row_evaluate_cost 0.2 读取并检测一条记录是否符合搜索条件的成本。如果增大这个值,可能会让查询优化器更倾向于使用索引(而不是全表扫描)

修改配置之后需要让,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 | 2021-12-11 18:02:26 | NULL    |
| default     |           0 | memory_block_read_cost |       NULL | 2021-12-11 18:02:26 | NULL    |
+-------------+-------------+------------------------+------------+---------------------+---------+
2 rows in set (0.00 sec)

engine_name:成本常数适用的存储引擎的名称。如果该值为default,则意味着对应成本常数适用于所有的存储引擎。
device_type:存储引擎使用的设备类型。这主要是为了区分常规的机械硬盘和固态硬盘。不过在MySQL5.7.22版本中并没有对机械硬盘,固态硬盘的成本进行区分,所以该值默认是0。

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

成本常数名称 默认值 描述
io_block_read_cost 1.0 从磁盘上读取一个块对应的成本。请注意这里使用的是"块",而不是"页"。对于InnoDB存储引擎来说,一个页就是一个块,不过对于MyISAM存储引擎来说默认以4,096字节作为一个块
memory_block_read_cost 1.0 与上一个成本常数类似,只不过衡量的是从内存中读取一个块对应的成本

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

总结

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

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

MySQL EXPLAN优化成本常数简介相关推荐

  1. MySQL性能优化的参数简介

    公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可 ...

  2. mysql如何explan优化sql_《MySQL数据库》MySQL 优化SQL(explain)

    前言 如果要写出优质的SQL语句,就需要了解MySQL的存储原理.MySQL是如何分析SQL,如何利用索引查询. Explain 关键字 explain select * from ic_base;  ...

  3. 一文带你了解MySQL之基于成本的优化

    前言 我们之前老说MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询,怎么就带大家详细了解一下 目录 一.什么是成本 二.单表查询的成本 2.1 ...

  4. 《MySQL性能优化和高可用架构实践》简介与推荐序

    #好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...

  5. MySQL性能优化:SQL慢查询优化,索引优化,表优化

    1. MySQL优化概述 MySQL 优化是一个综合性的技术,在优化上存在着一个调优金字塔的说法,如下: 很明显从图上可以看出,越往上走,难度越来越高,收益却是越来越小的.比如硬件和 OS 调优,需要 ...

  6. mysql高级篇(二)mysql索引优化分析

    mysql高级篇笔记 mysql高级篇(一)mysql的安装配置.架构介绍及SQL语句的复习. mysql高级篇(二)mysql索引优化分析. mysql高级篇(三)查询截取分析(慢查询日志).主从复 ...

  7. MySQL性能优化、故障排查及最佳实践秘籍,阿里云数据库专家玄惭的“武功”全记录...

    为什么80%的码农都做不了架构师?>>>    文章简介 玄惭,真名罗龙九,阿里云DBA专家,负责阿里云RDS线上稳定以及专家服务团队.他经历过阿里历年双11实战考验,积累了7年对阿 ...

  8. MySQL性能优化速记

    MySQL性能优化速记http://www.bieryun.com/3064.html 总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是 ...

  9. mysql union查询_一本彻底搞懂MySQL索引优化EXPLAIN百科全书

    MySQL逻辑架构介绍 日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: M ...

最新文章

  1. Bootstrap4 glyphicon 移除图标 glyphicon fonts-faces 解决方案
  2. MATLAB从入门到精通:MATLAB识别 自带手写数字集的CNN(LeNet5)
  3. java 线程_理解java多线程
  4. 【旅行商问题】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】
  5. Framehawk技术-思杰HDX
  6. 深圳市科技创新委员会关于2021年高新技术企业培育库拟入库企业名单公示的通知
  7. 58节沈大海H5edu.cn2016javaScript视频教程打包下载
  8. 监狱智能化管理系统综合安防解决方案
  9. Adobe Creative Cloud 不能加载APP导致卸载ps失败 解决方案
  10. endnote修改正文中参考文献标注_如何用endnote修改毕业论文后参考文献格式为毕业手册要求格式...
  11. openwrt安装aliddns使用阿里云ddns
  12. 数字转成人民币汉字大写(李刚著《疯狂Python讲义》P87,解决小数部分及多个零的问题。学习笔记)
  13. win7找回快速启动栏
  14. 腾讯开放平台 集成qq登录
  15. 如果这篇文章说不清epoll的本质,那就过来掐死我吧
  16. 太阳直射点纬度计算公式_高中地理——每日讲1题(极昼、极夜、太阳高度角、太阳辐射)...
  17. Excel 按照某一列不同内容插入分页符号
  18. Pixelmator Pro for Mac(图像编辑软件)
  19. 【随手记】Oracle存储过程报错 Compilation errors for PACKAGE BODY
  20. 多传感器融合感知 --传感器外参标定及在线标定学习

热门文章

  1. 线性表顺序存储结构的基本操作(C++)
  2. 【linux】查看Linux系统版本信息的几种方法
  3. 亚马逊 新版卖家中心 销售伙伴API(amazon selling partner API)开发人员指南
  4. ​1.F : 模拟计算器​
  5. 一分钟教你简单教程:AutoCAD怎么绘制红绿灯?
  6. 主机、虚拟机、开发板网络环境搭建小结备忘
  7. 2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛:E—Partial Sum
  8. 百分点认知智能实验室出品:机器翻译是如何炼成的(上)
  9. 时间复杂度到底怎么算?
  10. HarmonyOS开发语言,华为鸿蒙操作系统 HarmonyOS