数据库性能下降,亟待解决
背景是甲方缩减服务器配置,没想到把?
我也没想到。
应用服务器还能理解。
缩减数据库服务器配置?没开玩笑??
没开玩笑。
包括内存、硬盘、CPU都不同程度的进行了缩减。
效果也是立竿见影,缩减之后。
数据库处理效率直线下降。
巡查发现,部分表存在历史数据,可以删除,提升一点点效率(虽然不高)。
少量数据删除完美方式
直接DELETE肯定是最省事的。
什么?truncate?
能用我不早就用了吗。。
历史数据需要按条件过滤,意味着truncate用不了。
用不了就用不了把。
delete也凑合能用。
简单粗暴的方案是,直接一条delete语句搞定(假设状态小于0的为历史数据):
delete from xxx where status < 0;
数据量少这个方案可行。数据量上来之后,开始报错。
没办法,只能增加条件:
delete from xxx where status < 0 and start_date_time between '2020-01-01' and '2020-06-30';
勉强能用。
跑了一段时间,挑战来了。
加上日期,日期改成一天都还是异常。
只能另辟蹊径。
上面的方法不适用大数据量,但这个方法比较完美
聪明的办法想不到,笨办法一想一箩筐。
一当接一当,总有一当不踩坑。
因为用的Navicat(不得不说,是真好用),所以想在Navicat上试一下。
不试不知道,一试吓两跳。
步骤挺简单的,一看就会。
看起来繁琐,多操作几次就熟悉了。
数据量我这最大可以调到150000条。
150000条删除速度在20秒内,直接用了主键索引比条件筛选快太多了。
优化空间很大,但这个需求没那么频繁,能用凑合用吧。
学会了吗?