读书频道 > web开发 > 其他综合 > 看透Spring MVC:源代码分析与实践
1.4.2 数据库优化
2015-12-01 13:16:50     我来说两句 
收藏    我要投稿   
第一篇首先讲解了网站基础知识,包括网站架构的演变以及每种架构所针对的问题、Web底层的协议以及简单的实现方法,最后分析了Tomcat的实现方法,这样可以让大家对Web有整体而且深入的理解,从而为分析Spring MV  立即去当当网订购

要解决数据量大的问题,是避不开数据库优化的。数据库优化可以在不增加硬件的情况下提高处理效率,这是一种用技术换金钱的方式。数据库优化的方法非常多,常用的有表结构优化、SQL语句优化、分区和分表、索引优化、使用存储过程代替直接操作等,另外有时候合理使用冗余也能获得非常好的效果。

表结构优化

表结构优化是数据库中最基础也是最重要的,如果表结构优化得不合理,就可能导致严重的性能问题,具体怎么设计更合理也没有固定不变的准则,需要根据实际情况具体处理。

SQL语句优化

SQL语句优化也是非常重要的,基础的SQL优化是语法层面的优化,不过更重要的是处理逻辑的优化,这也需要根据实际情况具体处理,而且要和索引缓存等配合使用。不过SQL优化有一个通用的做法就是,首先要将涉及大数据的业务的SQL语句执行时间详细记录下来,其次通过仔细分析日志(同一条语句对不同条件的执行时间也可能不同,这点也需要仔细分析)找出需要优化的语句和其中的问题,然后再有的放矢地优化,而不是不分重点对每条语句都花同样的时间和精力优化。

分区

当数据量变多的时候,如果可以分区或者分表,那将起到非常好的效果。当一张表中的数据量变多的时候操作速度就慢了,所以很容易想到的就是将数据分到多个表中保存,但是这么做之后操作起来比较麻烦,想操作(增删改查)一个数据还需要先找到对应的表,如果涉及多个表还得跨表操作。其实在常用的数据库中可以不分表而达到跟分表类似的效果,那就是分区。分区就是将一张表中的数据按照一定的规则分到不同的区来保存,这样在查询数据时如果数据的范围在同一个区内那么可以只对一个区的数据进行操作,这样操作的数据量更少,速度更快,而且这种方法对程序是透明的,程序不需要做任何改动。

分表

如果一张表中的数据可以分为几种固定不变的类型,而且如果同时对多种类型共同操作的情况不多,那么都可以通过分表来处理,这也需要具体情况具体对待。笔者之前对一个业务系统进行重构开发时就将其中保存工人工作卡片的数据表分成了三个表,并且对每个表进行分区,在同时使用缓存(主要用于在保存和修改时对其他表的数据获取中,如根据工人Id获取工人姓名、工人类别、所在单位、所在工段及班组等信息)、索引、SQL优化等的情况下操作速度比原来提高了100倍以上。那时的分表是按照工作卡片的类型来划分的,因为当时的要求是要保留所有的记录。比如,修改了卡片的信息,则需要保存是谁在什么时候对卡片进行修改,修改前的数据是什么,添加删除也一样,这种需求一般的做法就是用一个字段来做卡片状态的标志位,将卡片分成不同的类型。不过这里由于数据量非常大所以就将卡片分别保存到了三个表中,第一个表保存正常卡片,第二个表保存删除后的卡片,第三个表保存修改之前的卡片,并且对每个表都进行了分区。由于报表一般是按月份、季度、半年和年来做的,所以分区是按月份来分的,每个月一个分区,这样问题就解决了。当然随着时间的推移,如果总数据量达到一定程度,还需要进一步处理。

另外一种分表的方法是将一个表中不同类型的字段分到不同的表中保存,这么做最直接的好处就是增删改数据的时候锁定的范围减小了,没被锁定的表中的数据不受影响。如果一个表的操作频率很高,在增删改其中一部分字段数据的同时另一部分字段也可能被操作,而且(主要指查询)用不到被增删改的字段,那么就可以把不同类型的字段分别保存到不同的表中,这样可以减少操作时锁定数据的范围。不过这样分表之后,如果需要查询完整的数据就得使用多表操作了。

索引优化

索引的大致原理是在数据发生变化(增删改)的时候就预先按指定字段的顺序排列后保存到一个类似表的结构中,这样在查找索引字段为条件的记录时就可以很快地从索引中找到对应记录的指针并从表中获取到记录,这样速度就快多了。不过索引也是一把双刃剑,它在提高查询速度的同时也降低了增删改的速度,因为每次数据的变化都需要更新相应的索引。不过合理使用索引对提升查询速度的效果非常明显,所以对哪些字段使用索引、使用什么类型的索引都需要仔细琢磨,并且最好再做一些测试。

使用存储过程代替直接操作

在操作过程复杂而且调用频率高的业务中,可以通过使用存储过程代替直接操作来提高效率,因为存储过程只需要编译一次,而且可以在一个存储过程里面做一些复杂的操作。

上面这些就是经常用到的数据库优化的方法,实际环境中怎么优化还得具体情况具体分析。

除了这些优化方法,更重要的是业务逻辑的优化。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.4.1 缓存和页面静态化
下一篇:1.4.3 分离活跃数据
相关文章
图文推荐
3.2 Windows 7设置
3.1 DNS解析
2.3 HTTP协议
2.2 TCP/IP协议与So
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站