日期:2014-05-20  浏览次数:20846 次

拆分表后的sql语句是否要全部重写
前几天看到一个帖子说数据量大了以后就要做表拆分、临时表之类的。
那么,如果表拆分了,以前的sql语句是 在表Total中 操作,现在要根据不同的逻辑,分别在 表sub1,表sub2,表sub3 中操作,那sql语句不都得改呀?
感觉这样味道不对呀!
实际开发中是如何运行的呢?

------解决方案--------------------
数据量很大的话,是肯定会 拆分表的 ,例如 历史记录表 

想提高查询速度 要取决于记录的多少,如果记录非常多,千万级,查询也不会快的

所以 缩小记录的数量 才是解决问题的办法
------解决方案--------------------
是要拆的,但这在设计时已经设计 好了,写SQL的时候也要考虑,写拆分后的语句啊。
横向拆,就是把不常用的数据行放到另外一个表,比如你经常更新的表,就只对这个表操作,岊你的查询也许会对两个表进行操作。
第二是纵向拆,将不经常查询的字段放到另外的表,这样更新的时候可能要涉及到多个表,而查询的时候只涉及到一个表。
以上是举例,情况不同了。但这结语句都是在设计之后,而不是已经有了,再进行更改。那样,是有些麻烦。
------解决方案--------------------
首先 这是设计时的工作,设计需要考虑的地方。
如果需要改的话 也是改数据访问部分的代码,
例如存储过程

改动大的是应用了ORM ,但是需要拆分表的数据量 估计也不会用ORM了
------解决方案--------------------
拆表不是好方法,我接触的几个系统,有几百个表,如果拆表,
会增加很多的工作量,根本不现实,而且各个表的合并与转移,涉及到很多的问题,

其实可以考虑拆数据库,就是象用友ERP一样,一个年度一个账套,
但这也麻烦,涉及年度账套结转的问题,而用友ERP年度结转是最容易出问题的,
而且如果跨年度查询都是问题,

总之,没见过好方法来解决,都很复杂,
所以我打算这样子做,就是不分表,也不按年度建帐套,
而是活动数据库保留几年的数据,然后将几年前的数据备份下来,然后从活动数据库里删掉,
这样只要做好备份工作就行了,备份工作是独立的,不影响正常的业务处理,
而上面的两种方法都会影响正常的业务处理,尤其是分表,

但对于一些增长速度非常快的表,必须得分表,比如电信详单,那种表很快就可以超过亿,