背景:
MySQL 版本:8.0.15
A表数据量:2600万+,分区32个,innodb引擎
背景介绍:
由于A表是记录数最大的数据表,由上线之初的100万数据,迅速增长到500万、1000万,现在数据量在2600万左右。预计未来1年内增长到1亿+。
运营管理端对A表有数据列表、条件匹配查询、分页的业务功能。
A表数据量在100万时,没有出现性能问题。
A表数据量涨到500万时,获取匹配条件记录总数的count语句性能出现了,影响了该版块的整体效率。
第一次优化:
将数据列表业务和匹配条件记录总数业务拆分,通过异步方式加载匹配条件记录总数。
表现出的效果为列表数据加载完成后,10秒内记录总数和分页会出现。暂时满足了运营部门的业务需求。
但随着数量的增长到1000万时,记录总数业务越来越慢,无法满足运营部门的需求。
优化思路:
向运营部门讲明白了数据记录总数慢的原因,以及从MySQL本身及SQL调优方面入手优化这个思路几乎没有优化的空间了,建议从业务层面进行优化;
通过磋商,当记录数超过1万+时,系统传达出的匹配记录总数为1万+和一个具体的数字,对于运营人员意义几乎是一致的。而小于1万+时,精确的数字是有意义的。
因此,优化思路如下:
1、当匹配记录总数小于1万时,统计出具体数字;
2、大于等于