背景:
mysql表 主键字段 count,速度很慢,耗时将近30s
从执行计划可以看出:
explain SELECT COUNT(rule_id) AS dataCount FROM `sku_safe_stock_rule`;
原理分析:
Select tables optimized awaySELECT操作已经优化到不能再优化了
(MySQL根本没有遍历表或索引就返回数据了)由此可以看出 本sql语句执行解析后,直接在 mysql buffer缓存即可命中,不用去存储引擎遍历表即可返回结果。
继续分析:
但是既然直接在缓存命中后即可返回count()结果,为什么仍然这么慢?
这里便引出 mysql buffer pool这个概念. (详细原理可再查再学)
最终解决:
最终,发现
1.
mysql buffer pool只有 512M。
调整为 2G后, 该条count(主键) sql性能便提升飞速。
2.
mysql表中总数据量440W+, 失效数据很多,执行sql工单,归档无效数据后,对sql性能也有很大帮助。