在一些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
版权声明:本文为qrn196789910原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。