数据库优化小计

周一夜间进行了一次XX业务相关的数据库表优化。


原因:

一共4张表,数据量不大,最小的40万记录,最大的300万,大小不超过300MB。但由于历史原因,表没有建立索引,对应的服务使用的SQL千姿百态,修改起来难度有点大,容易改错,涉及的全国客户较多,大部分都是全表扫描,在秒级的响应时间,但大多客户还能忍着。


目标:

对于此类无法通过建立索引提高响应速度的表,采用降低数据量,即水位线的方式,提高全表扫描的效率。


方案:

经过多次改进,行程可用的方案:

第一部分:

1、CREATE TABLE XXX_20130910 AS SELECT * FROM XXX;

利用原表建立一个中间表。

2、TRUNCATE XXX;

Truncate原表。

3、INSERT INTO XXX SELECT * FROM XXX_20130910 WHERE 7天;

将7天的数据插入原表。

此时启动相应服务,这个过程可以保证利用最短的时间恢复生产表的使用。

第二部分:然后建立历史表:

1、CREATE TABLE XXX_HISTORY AS SELECT * FROM XXX_20130910 WHERE 1<>1;

利用中间表建立一个空的历史表。

2、建立夜维,用于每天将生产表7天之前的数据导入历史表。

整体操作完成后,用于生产的表保持7天的数据量,即使业务量增加,水位线也不会上升太多,保持在一定的高度。同时通过将生产表历史数据导入历史表的方式,既保证了历史数据的备份,也保证了生产表的数据量。


上线:

第一部分包括检查的时间总共耗时20分钟。与用户确认测试后开始第二部分,大约用时10分钟。


效果:

当天上线后的效果还可以,大多应用的响应时间从秒级,下降到xx毫秒级,有待一段时间内的查看。


总结:

整体过程经过来多次修改与总结,且为上线当天整理了步骤手册,标明了每步的操作以及注意的地方,所以操作当天比较顺手,主要是与多个客户联系停止应用、测试应用比较耗时,不同的客户配合的程度不同,不过还算是比较配合。

对于数据库表的优化,以上操作其实已经精简到最简单的语句了,我觉得优化操作不在于多么的复杂,最重要的是简单、有效、安全,何况是没有用户驱动的优化,做好了可能不会说你什么,但做错了就有人叫了,得不偿失,因此不同的优化操作,可能选择的方法不同,但核心应该坚持“简单、有效、安全”,这样才能做到画龙点睛的效果。个人见解,欢迎拍砖!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值