MySQL优化器特性(七)成本估算常数

俊达2年前技术文章710


成本估算常数表示执行一些MySQL基础操作时的成本,如读取一个页面,创建一个临时表,比较一条记录,解析一行记录等操作。


mysql.engine_cost和mysql.server_cost表分别记录存储引擎和Server层的常量


engine_cost

mysql> select * from mysql.engine_cost;
+-------------+-------------+------------------------+------------+---------------------+---------+---------------+
| engine_name | device_type | cost_name              | cost_value | last_update         | comment | default_value |
+-------------+-------------+------------------------+------------+---------------------+---------+---------------+
| default     |           0 | io_block_read_cost     |       NULL | 2020-03-12 18:52:18 | NULL    |             1 |
| default     |           0 | memory_block_read_cost |       NULL | 2020-03-12 18:52:18 | NULL    |          0.25 |


server_cost

mysql> select * from mysql.server_cost;
+------------------------------+------------+---------------------+---------+---------------+
| cost_name                    | cost_value | last_update         | comment | default_value |
+------------------------------+------------+---------------------+---------+---------------+
| disk_temptable_create_cost   |       NULL | 2020-03-12 18:52:18 | NULL    |            20 |
| disk_temptable_row_cost      |       NULL | 2020-03-12 18:52:18 | NULL    |           0.5 |
| key_compare_cost             |       NULL | 2020-03-12 18:52:18 | NULL    |          0.05 |
| memory_temptable_create_cost |       NULL | 2020-03-12 18:52:18 | NULL    |             1 |
| memory_temptable_row_cost    |       NULL | 2020-03-12 18:52:18 | NULL    |           0.1 |
| row_evaluate_cost            |       NULL | 2020-03-12 18:52:18 | NULL    |           0.1 |
+------------------------------+------------+---------------------+---------+---------------+


这里的数据可以直接修改,修改后通过flush optimizer_costs加载生效。

mysql> update mysql.server_cost set cost_value=1 where cost_name = 'row_evaluate_cost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> FLUSH OPTIMIZER_COSTS;
Query OK, 0 rows affected (0.01 sec)


退出当前session,重新登录后查看SQL的成本:

mysql> explain format=tree select * from test_ror;
+----------------------------------------------------+
| EXPLAIN                                            |
+----------------------------------------------------+
| -> Table scan on test_ror  (cost=105.25 rows=105)
 |
+----------------------------------------------------+
1 row in set (0.00 sec)


一般情况下不建议修改这里的数据。


相关文章

MySQL运维实战(2.2)忘记密码如何处理

如果忘记了一个普通用户的密码,可以使用管理员账号登录,修改其他用户的密码。但是如果所有管理员账号的密码都忘记了,应该怎么处理呢?如果忘记root密码,可以使用skip-grant-tables参数启动...

MySQL运维实战(7.2) MySQL复制server_id相关问题

MySQL运维实战(7.2) MySQL复制server_id相关问题

主库server_id没有设置主库没有设置server_idGot fatal error 1236 from master when&nb...

MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

设置NO_BACKSLASH_ESCAPES后,反斜杠(\)不作为转义符。不设置NO_BACKSLASH_ESCAPES时,反斜杠(\)用来转义后一个字符mysql> create&n...

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

如上图架构,当后端MySQL主库出现问题,发生主备切换后,如何自动将ProxySQL的读写切换到新的主库上?可以通过mysql_replication_hostgroups表配置实现:insert&n...

MySQL运维实战之备份和恢复(8.2)xtrabackup备份到云端(OSS)

xtrabackup工具中有一个xbcloud程序,可以将数据库直接备份到S3对象存储中,本地不落盘。这里介绍将数据库直接备份到OSS的一种方法。具体方法如下:1、准备OSS我们使用ossutil工具...

MySQL运维实战(6)用户认证插件caching_sha2_password

MySQL用户认证可以使用几种不同的方式,创建用户时可以制定认证方式:create user 'username'@'%' identif...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。