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

  • Post author:
  • Post category: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



版权声明:本文为qrn196789910原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。