Mysql 查询优化成本的计算,索引一定快?

在一些Mysql的面试题中,一定会问到Mysql优化的问题,可能大部分人都会回答,加索引就可以解决,查询慢的问题,那么接下来别人可能又会问到,那索引是不是加的越多越好呢,或者说索引是不是什么字段都可以加,什么字段不应该加呢,又或者说为什么有些查询明明加了索引还是慢呢?今天来说说mysql是如何计算查询优化的成本的。

一.计算全表扫描的代价

计算全部扫描需要2个重要的数据:
1.聚簇索引占用的页面数
2.表中的记录数
这两数使用 SHOW TABLE STATUS LIKE ‘single_table’ (single_table) 这个是表 名 查看表中 页面数和 记录数

Data_length : 表中的占用存储空间的字节数
rows: 表中的记录数

计算IO成本 :
Data_length 值假设 1589248 先计算出 聚簇索引占用的页面数 是多少

聚簇索引 页面数量= 1589248 ÷16 ÷ 1024  = 97 在这里插入代码片

IO成本: 97 * 1.0 + 1.1 = 98.1
97是页面数据 1.0 是读取一个页的时间 1.1 是mysql的微调值

计算CPU成本:
rows 的值假设是 9636 记录计算出CPU成本

CPU成本:  9636  * 0.2 + 1.0 = 1939.6

全表扫描的成本:98.1 + 1939.6 = 2037.7

二.计算索引区间查询的代价

假设 key 二级索引 查询 ,条件为 key > 10 and

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值