不是真实需求只是突然想到了,想请教一下,留着以后用 啊啊比如有 100 个表,每个表的表结构都是一样的。
每个表 都有自己的“公司编号“   例如 表一的公司编号  101  , 表二的公司编号 102 , 彼此不会重复现在我想要汇总这100张表的数据,进行分析:
 
1、采用视图的方式       create view v_table_all   
 as   
 select id,name from [db1].dbo.[table1] union all  
 select id,name from [db1].dbo.[table2] union all  
 select id,name from [db1].dbo.[table3] union all  
 ......
 select id,name from [db1].dbo.[table50] union all  
 select id,name from [db2].dbo.[table51] union all  
 select id,name from [db2].dbo.[table52] union all  
 ......
 select id,name from [db2].dbo.[table100]   2、汇总 100 张表的数据 到一个总表里   
我个人比较倾向于第一种的方式,因为简单啊,但是这个查询效率到底能咋样那就不知道了哪位做过这样的项目,给俺讲讲呗    谢谢
  

解决方案 »

  1.   


    用一张表当然是好了,但是当数据量大的时候 就得考虑 分表 分区 分库  , 那还不如一开始就先把表分开算了 省得以后再改。当然 也可以使用一个表保存最新的数据,定期将老数据移动到别的表中。只是没有接触过太大数据量的项目,没有经验啊,不知道那种方案更有操作性   
    如果想分的话直接用表分区了,对外是一张表,比union的应该更可取
      

  2.   


    你看这样靠谱不:
    1、把所有的部门数据统一保存到 DB1.dob.TB1 中
    2、定期将  DB1.dob.TB1 中的 “老数据”  移到  DB2.dob.TB2  中,对 DB2.dob.TB2 进行分区
    3、建立汇总查询用的视图:
     create view v_table_all   
     as   
     select id,name from [db1].dbo.[TB1] union all  
     select id,name from [db2].dbo.[TB2]
      

  3.   


    你看这样靠谱不:
    1、把所有的部门数据统一保存到 DB1.dob.TB1 中
    2、定期将  DB1.dob.TB1 中的 “老数据”  移到  DB2.dob.TB2  中,对 DB2.dob.TB2 进行分区
    3、建立汇总查询用的视图:
     create view v_table_all   
     as   
     select id,name from [db1].dbo.[TB1] union all  
     select id,name from [db2].dbo.[TB2]
    可以。TB1中的数据是使用频繁的,其他的属于备份的。
      

  4.   

    如果数据量不大性能没影响的情况下用方法1,不用额外维护一个总表,这是分区视图,在旧版本SQL2000时常用到
    方法2效率会高,写入的时间(异步还是实时)会增加维护的成本,如果是分区表时可以考虑把所有表整合为分区表,不需要再做额外维护多一个表 
      

  5.   

    谢谢  sinat_28984567 的热心回答你的回答让我开阔了思路  谢谢
      

  6.   


    目前来看只要能满足  1-2亿 条数据的性能要求就应该可以了,再多的数据就应该考虑换架构了,可以不做考虑。roy_88 您的意思是不是说 没必要再弄个汇总表,多按几块硬盘,直接使用分区表就可以满足要求了 ?   
      

  7.   

    不需要多安硬盘,直接分在同一个盘会生成多个数据库文件,这样也可解决多数查询问题,要根据自己的情况去处理,数据量大小等因素,分多个硬盘除非你的IO已存在瓶塞看#7上面方法,根据自己的数据量和IO去判断实现,要灵活应用,如果视图已满足没必要去想其它方法,明白?
      

  8.   

    引用MSDN,功能介绍要自己看,自己动手去测,动手是王道
    在这分区表SQL2005刚出来时曾测过,分区分多文件存储的数据库文件组里,通常提升级1/4以上是没问题的,主要看你的内存配置是否跟上和分表的规则是非合理等,硬件不行一起白搭
    分区的优点
    通过对大型表或索引进行分区,可以具有以下可管理性和性能优点。
    可以快速、高效地传输或访问数据的子集,同时又能维护数据收集的完整性。 例如,将数据从 OLTP 加载到 OLAP 系统之类的操作仅需几秒钟即可完成,而如果不对数据进行分区,执行此操作需要几分钟或几小时。
    您可以更快地对一个或多个分区执行维护操作。 这些操作的效率更高,因为它们仅针对这些数据子集,而非整个表。 例如,您可以选择在一个或多个分区中压缩数据,或者重新生成索引的一个或多个分区。
    您可以根据经常执行的查询类型和硬件配置,提高查询性能。 例如,在两个或更多的已分区表中的分区列相同时,查询优化器可以更快地处理这些表之间的同等联接查询,因为可以联接这些分区本身。
    当 SQL Server 针对 I/O 操作执行数据排序时,它会首先按分区对数据进行排序。 SQL Server 每次访问一个驱动器,这样可能会降低性能。 为了提高数据排序性能,可以通过设置 RAID 将多个磁盘中的分区数据文件条带化。 这样一来,尽管 SQL Server 仍按分区对数据进行排序,但它可以同时访问每个分区的所有驱动器。
    此外,您可以通过对在分区级别而不是整个表启用锁升级来提高性能。 这可以减少表上的锁争用。
      

  9.   

    视图吧,只对我来说大部分都是视图,那100张表,我所遇到的情况都是一些batch或者子系统定期的数据之后汇总一起,或者做仓库之后再转移到别的地方
    版主大人说的就更有价值了