mysql根据执行计划优化_MySQL对执行计划进行的优化

Mysql会对需要执行的SQL进行一个成本计算。然后用计算出来的成本来判断选择什么执行计划。

这个成本有2部分。

从磁盘将数据页读取出来的成本值 = 1.0,消耗的是磁盘IO

读取和检测一条数据是否符合查询的条件成本值=0.2 ,消耗的是CPU计算

计算一次全表扫描的成本如下: (计算不完全准确,只是表达意思)

1 因为是全表扫描,所以要加载所有的数据页,假设有100个数据页。 那么磁盘IO的总成本大概 = 100 * 1 = 200 。

2 假设这100页的数据有10000条。 那么CPU的总成本值 = 10000 * 0.2 = 2000

那么这次全表扫描的总成本 = 200 + 2000 = 2200。

使用索引进行查询的成本如下:

在二级索引里面查询有以下几个部分:

查询范围区间,其实就是查询的条件,例如 name = XX 就是1个区间,age >10 and age < 20就是2个区间。 1个区间的成本 = 1页的成本。 这个成本比较低,一般是个位数。 例如3个条件 = 3

估计在二级索引里面筛选的数据条数目, 然后计算CPU成本, 例如 100条 : 100 * 0.2 = 20

进行回表,在回表的时候,默认认为1条数据的成本 = 1个数据页的成本 = 1 。例如100条数据回表的成本= 100 * 1 = 100 。

回表以后,就可以根据其他条件去筛选最后符合查询的数据,这个成本是CPU成本,假设还是那100条那么成本 = 100 * 0.2 = 20

最后将所有成本加起来就是使用索引进行查询的成本了: 3 + 20 + 100 + 20 = 153。

对比一下全表扫描和索引扫描的成本。差距是很大的。

多表关联查询和单表的查询成本估算方法差不多, 只是要估算多个表的查询成本进行计算。

如果可以使用多个索引的时候,MySql会对几个执行方案进行成本的计算, 选择最低成本的方案来执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值