原创作品,出自 “晓风残月xj” 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj)。
由于各种原因,可能存在诸多不足,欢迎斧正!
随着业务的快速发展,表不断增多,结构不断扩大,数据量也在慢慢积累,最近数据库DB压力较大,有些慢查询日志 。个人总结原因如下:表数量和结构日渐复杂,单表数量增多,联表查询等大sql ,应用层大事务等等。
1、表数量和结构日渐复杂
随着业务的扩张,这种规模带来的问题最通用的解决方案应该是分库分表。分库有2种:水平拆分和垂直拆分。其中,垂直分库是将不同业务含义的表拆分到不同的数据库中;水平分库是将相同表中不同业务含义的数据行拆分到不同的数据库中。同理,分表也有垂直拆分和水平拆分的区别。其中,垂直分表是将表的不同字段拆分成不同的表;水平分表是将表的不同数据行拆分到不同表中,比如历史数据切分,冷热数据分离等等。
2、单表数量增多
可以通过分表分库解决,不过相对工作量大点。简单直接粗暴的解决方案是将过期或者无效或者相对不重要的数据分离或者清理掉,可以定期同步到相对隔绝的历史表中,也可以应用层定时任务直接删除数据(物理删除和逻辑删除都可以),不过最好是定时任务或者手工同步到历史表中备份,以防以后用到。
3、联表查询等大sql
拆分联表查询等大sql语句,可以减少大sql造成的读写锁竞争、利用DB本身的查询缓存、方便应用层预加载设置缓存,但拆分sql分多次查询潜在的问题是占用网