《Mysql是怎样运行的》读书笔记之成本的优化

MySQL中,,一个查询的执行成本是由I/O成本和CPU成本组成的,对于InnoDB存储引擎来说,读取一个页面的I/O成本默认是1.0,读取以及检测一条记录是否符合搜素条件的成本默认是0.2
在单表查询中,优化器生成执行计划的步骤一般如下。

  • 步骤1.根据搜索条件,找出所有可能使用的索引。
  • 步骤2.计算全表扫描的代价。
  • 步骤3.计算使用不同索引执行查询的代价。
  • 步骤4.对比各种执行方案的代价,找出成本最低的那个方案。

在优化器生成执行计划的过程中,需要依赖一些数据,这些数据可能是使用下面两种方式得到的:

  • index dive:通过直接访问索引对应的B+树来获取数据。
  • 索引统计数据:直接依赖对表或者索引的统计数据。

为了更准确地计算连接查询的成本,会采用某些规则来预测驱动表的扇出值。

连接查询总成本=单次访问驱动表的成本+驱动表扇出值*单次访问被驱动表的成本

对于左连接和右连接来说,它们的驱动表是固定的,所以只需要分别为驱动表和被驱动表选择成本最低的访问方法,就可以找到最优的查询方案。

对于内连接来说,为了生成成本最低的执行计划,需要考虑两方面:

  • 选择最优的表连接顺序。
  • 为驱动表和被驱动表选择成本最低的访问方法。

我们可以通过手动修改mysql数据库下engine_cost表或者server_cost表中的某些成本常数,更精准地控制在生成执行计划是的成本计算过程。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值