Mysql 查询优化成本的计算,索引一定快?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql 查询优化成本的计算,索引一定快?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1869字,纯文字阅读大概需要3分钟。
内容图文
![Mysql 查询优化成本的计算,索引一定快?](/upload/InfoBanner/zyjiaocheng/869/6921e5bb6dae4d2183eb799f3d00a184.jpg)
在一些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 key < 1000 那么查询的区间就是 [10,1000],执行 二级索引查询后,记录数 为 98 (假设的值)
计算IO成本 :1.0+ 98 * 1.0 =99(1.0是 区间数) 98 记录数 1.0(常数)
计算CPU成本 : 98 *0.2 + 0.01 + 98 * 0.2 = 39.21(二级索引读取记录成本) (回表记录成本)
二级索引单区间索引查询成本: 99 + 39.21 = 138.21
三。多个区间计算的成本
假设 key 二级索引 查询,条件为 key2 in(‘a’,‘b’,‘c’,‘d’,‘e’), 那么 区间查询 [a,a] 查询到的记录数 为 34 [b,b]查询到的记录数 为 25 [c,c]查询到的记录数为 60 ,[d,d]查询到的记录数为 70,
[e,e]查询到的记录数为 77 (假设二级索引查询到的记录数) 总记录数为: 266
计算IO成本: 5.0+266 *1.0 = 271
计算CPU成本 266 * 0.2 + 0.01 + 266 * 0.2 = 106.41
二级索引多区间索引查询成本:377.41
以上分析为单表查询 ,mysql 执行计划会以哪种查询成本低,而选择其中的查询方式。所以这就是为什么加了索引也不一定快的原因,mysql查询优化器会帮我们计算是不是使用索引还是说使用全表扫描的时间快,那个快就用那个。
内容总结
以上是互联网集市为您收集整理的Mysql 查询优化成本的计算,索引一定快?全部内容,希望文章能够帮你解决Mysql 查询优化成本的计算,索引一定快?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。