不是真实需求只是突然想到了,想请教一下,留着以后用 啊啊比如有 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 张表的数据 到一个总表里
我个人比较倾向于第一种的方式,因为简单啊,但是这个查询效率到底能咋样那就不知道了哪位做过这样的项目,给俺讲讲呗 谢谢
每个表 都有自己的“公司编号“ 例如 表一的公司编号 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 张表的数据 到一个总表里
我个人比较倾向于第一种的方式,因为简单啊,但是这个查询效率到底能咋样那就不知道了哪位做过这样的项目,给俺讲讲呗 谢谢
用一张表当然是好了,但是当数据量大的时候 就得考虑 分表 分区 分库 , 那还不如一开始就先把表分开算了 省得以后再改。当然 也可以使用一个表保存最新的数据,定期将老数据移动到别的表中。只是没有接触过太大数据量的项目,没有经验啊,不知道那种方案更有操作性
如果想分的话直接用表分区了,对外是一张表,比union的应该更可取
你看这样靠谱不:
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]
你看这样靠谱不:
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中的数据是使用频繁的,其他的属于备份的。
方法2效率会高,写入的时间(异步还是实时)会增加维护的成本,如果是分区表时可以考虑把所有表整合为分区表,不需要再做额外维护多一个表
目前来看只要能满足 1-2亿 条数据的性能要求就应该可以了,再多的数据就应该考虑换架构了,可以不做考虑。roy_88 您的意思是不是说 没必要再弄个汇总表,多按几块硬盘,直接使用分区表就可以满足要求了 ?
在这分区表SQL2005刚出来时曾测过,分区分多文件存储的数据库文件组里,通常提升级1/4以上是没问题的,主要看你的内存配置是否跟上和分表的规则是非合理等,硬件不行一起白搭
分区的优点
通过对大型表或索引进行分区,可以具有以下可管理性和性能优点。
可以快速、高效地传输或访问数据的子集,同时又能维护数据收集的完整性。 例如,将数据从 OLTP 加载到 OLAP 系统之类的操作仅需几秒钟即可完成,而如果不对数据进行分区,执行此操作需要几分钟或几小时。
您可以更快地对一个或多个分区执行维护操作。 这些操作的效率更高,因为它们仅针对这些数据子集,而非整个表。 例如,您可以选择在一个或多个分区中压缩数据,或者重新生成索引的一个或多个分区。
您可以根据经常执行的查询类型和硬件配置,提高查询性能。 例如,在两个或更多的已分区表中的分区列相同时,查询优化器可以更快地处理这些表之间的同等联接查询,因为可以联接这些分区本身。
当 SQL Server 针对 I/O 操作执行数据排序时,它会首先按分区对数据进行排序。 SQL Server 每次访问一个驱动器,这样可能会降低性能。 为了提高数据排序性能,可以通过设置 RAID 将多个磁盘中的分区数据文件条带化。 这样一来,尽管 SQL Server 仍按分区对数据进行排序,但它可以同时访问每个分区的所有驱动器。
此外,您可以通过对在分区级别而不是整个表启用锁升级来提高性能。 这可以减少表上的锁争用。
版主大人说的就更有价值了