当前位置:   article > 正文

mysql sql成本计算_mysql 索引成本计算

mysql 索引成本计算

成本计算

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

全表扫描的成本计算

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

show table status like 'orders'
  • 1

我们就可以得到聚簇索引的页数=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
  • 1
  • 2
mysql查看成本
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/599098
推荐阅读
相关标签
  

闽ICP备14008679号