以下都是在实际工作中遇到的问题和解决,希望能给大家提供一些思路和解决方案。 欢迎讨论信息。
环境:Linux服务器
mysql 5.7
问题:某个业务表的数据量有2亿件以上,但由于最初设计时制作了分表,所以现在的单表数据有千万件以上。 当MySQL单表达到千万以上时,整体性能会下降。 特别是像count这样的查询具体如下。
从图中可以看出,即使在索引字段中行走,count字段也需要30秒以上,如果再卡上一点,就会更慢。 对于具体的业务流程,列表查询一次需要约2分钟,并展示30个分页的数据。 这个用户体验很差。
解决方案:今天只从业务角度说明解决方案,不从mysql参数调整方面说明。
首先,在业务流程中设计到count这个动作,对2亿的数据来说确实很慢。 我的想法是,直接用一张表保存表中现在的最大记录值,需要count的话,直接去这个表获取并展示这个值,不需要做整个表的count操作。
修改业务代码实践后发现,2分钟内展示的页面,现在只需1秒钟就能打印出来,用户体验也随之提升。
稍后将慢慢组织sql优化和mysql参数优化。