MySQL 的成本计算
mysql在查询数据时考虑比较重要的两个成本: io成本与cup成本
将数据由磁盘加载到内存的过程称为io成本,读取一页的数据到内存io成本为1.0
数据加载到内存后,mysql在内存对数据的读取,解析,计算过滤,排序等相关处理称为cup成本,当通过内存检测一次数据满足执行sql的条件cpu成本为0.2
全表扫描时的执行过程: 实际就是将聚簇索引加载到内存(也就是实际数据),然后检查是否满足条件,然后将满足过滤条件的数据加入到结果集, 那么全表扫描时mysql所需要的io成本, cup成本怎么计算
io成本: 聚簇索引占用页数1.0+1.1(微调数), cpu成本: 数据条数0.2+1.0(微调数)
2.mysql中提供了专门的命令查看表的统计信息: 查看所有表"show table status;" 查看指定表"show table status like ‘表名’ ", 返回数据中rows表示数据行数(估计值), Data_length表示当前表数据占用的字节数, 聚簇索引一页16k, Data_length/16/1024获取到当前数据占用的页数
通过explain 查看执行成本
“explain format=json 实际执行的sql语句” 该方式比普通explain会多返回一些数据,其中query_cost的值就是执行当前sql所需要io成本+cpu成本,继续寻找会发现一个const_info内部保存了详细的执行成本