用实体表代替视图提升数据库速度

遇到了一个项目,数据库速度非常慢,即便是一个很普通的读取数据也要5、6秒的时间。当时,我拿到了网站的账号,但是却没有程序的源代码。这可怎么搞?
通过查看数据库数据,发现所有操作都会先经过一个视图查询。通过了解数据库逻辑知道,相同的数据进行了分表,但是在查询的时候,又需要在这些数据中寻找到唯一的那一条。原来的做法是利用视图对这些分表进行了集合查询。因为视图没有索引一说,所以速度就会变得很慢。
因为没有源代码,又不想重新做网站,就只能从数据库这里想办法。
首先想到的就是加内存。如果将数据全部调入内存,应该会加快速度。可是加大内存后却没有什么效果。想来是数据一直在变动,所以视图也在更新,根本做不到保存在内存。但是,改动的内存还是保留了下来。
接下来,能想到的就是不用视图。用数据库查询可以看到视图的创建代码。用相同的代码新建了一个表,试着查询了一下,速度一个字就飞了起来。
要想程序能够从这个表中查询,又将这个表改成了视图的名字。这样,程序查询的SQL语句就能直接找到这个表。
还有一个问题,就是要求各个分表更新的时候,这个表也只能同步更新。好在,MySQL还有触发器功能。在分表新建一条数据的时候,直接触发,在这个表中同步更新。
经过以上处理,现在数据库和程序倒是能够稳定运行了。当然,这样打补丁的做法肯定不能长久,最好的办法还是直接重做一遍网站。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣海生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值