mysql sql成本计算

本文详细介绍了MySQL中如何计算SQL查询的成本,包括全表扫描和使用索引的成本,并提供了查看查询成本的方法。全表扫描成本涉及IO和CPU计算,而使用索引时,成本包括二级索引扫描和回表操作。通过分析执行计划和使用Optimizer Trace,可以深入理解MySQL的查询优化过程。
摘要由CSDN通过智能技术生成

成本计算

mysql找出所有可能用到的索引,每个索引都去计算成本,再和全表扫描的成本对比,决定使用哪个索引或直接走全表。

全表扫描的成本计算

查找某个表的统计信息,rows字段表示表的记录数,这个值在MyISAM是准确的,在Innodb是一个估计值;data_length字段表示聚簇索引所占空间大小=聚簇索引页数x每页大小

show table status like 'orders'

我们就可以得到聚簇索引的页数=data_length/每页大小(16kb)=data_length/(16*1024)

  • IO成本=聚簇索引页数x1.0+1.1

1.0是成本系数,1.1是一个微调值

  • CPU成本=记录数x0.2+1.0

0.2是成本系数,1.0是一个微调值

  • 总成本=IO成本+CPU成本
使用索引的成本计算
  • 二级索引查询的成本=IO成本+CPU成本

    • IO成本=索引的扫描区间x1.0

    mysql优化器认为索引的扫描区间和读取一个页面是一样的,扫描区间就是使用了索引会扫描B+tree上哪些区间。比如where order_no in (1,2,3)的扫描区间个数就是3

    • CPU成本=二级索引记录数x0.2+0.01

    二级索引记录数可在执行计划的rows列看到,mysql是如何计算这个记录数的呢?

  • 回表的成本=IO成本+CPU成本

    • IO成本=查询出的条数x1.0

    mysql认为回表时有多少条记录就相当于访问多少个页

    • CPU成本=查询出的条数x0.2
  • 总成本=二级索引查询的成本+回表的成本

EXPLAIN select type from orders where order_no > 'K2019050510408' and order_no < 'K2020031050868' -- 221598 range
EXPLAIN  select type from orders where order_no > 'K2019050510408' and order_no < 'K2020031151013' -- 221706 ALL
mysql查看成本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值