如何查询多个数据库中名字相同的表的数据到同一张表

时间:2020-12-08 00:49:35
设定有超过10个数据库,名字不同。如A1,A2……A10,10个库
10个库中有都有一个相同的表 TABLE
表结构
Id Name Type Date

如何把10个库中表的数据查询到同一张表重新设置主键列ID排序,并提高查询效率。设想将要查询数据的总量超过1000万或1亿,查询的库将要超过10万,网页查询中在网页超时前查询出结果。

11 个解决方案

#1


select * from(
select Name, Type ,Date from A1.dbo.表名
union all 
select Name, Type, Date from A2.dbo.表名
union all 
select Name, Type ,Date from A3.dbo.表名
...) order by id

#2


设想将要查询数据的总量超过1000万或1亿

这个估计得考虑分区表了。单纯的UNION ALL效率是不会很高的

#3


引用 1 楼 sjcss 的回复:
select * from(
select Name, Type ,Date from A1.dbo.表名
union all 
select Name, Type, Date from A2.dbo.表名
union all 
select Name, Type ,Date from A3.dbo.表名
...) order by id

这个根本不行,是10个不同库中,10个相同名字的表啊

#4


引用 2 楼 fredrickhu 的回复:
设想将要查询数据的总量超过1000万或1亿

这个估计得考虑分区表了。单纯的UNION ALL效率是不会很高的


分区表怎么做,求解?

#5


引用 2 楼 fredrickhu 的回复:
设想将要查询数据的总量超过1000万或1亿

这个估计得考虑分区表了。单纯的UNION ALL效率是不会很高的

而且,经常不是为了查询单一记录,而是要查询几乎全表的记录,来计算总量之类的操作

#6


如果你没有大把的银子,那劝你去买十台普通的商用机,每台机上都装上SQLSERVER,每台机上装一个库,然后想要查询的那个客户端分别向这十个库发出查询请求,所得到的结果合并到客户端,再根据你的要求进行综合处理.

#7


这么大的数据量放到一起查询?光放到一起就要花不少时间了。
如果你们仅仅是需要查询这些数据的话,我建议你们专门做一个OLAP数据库用于统一存放这些数据,该数据库可以为读取性能做优化,每天定时使用SSIS包将当天的数据从其他数据库转移过来,然后所有的查询都对该数据库进行操作,这样不会影响到其他数据库在实际生产中的写操作。然后你们还可以使用SSRS生成专门的报表,再利用Microsoft Office SharePoint Server(MOSS)或者Microsoft Office PerformancePoint Server(PPS)这些软件进行后期开发,组建你们自己的BI模块。

#8


引用 3 楼 zdc198771 的回复:
引用 1 楼 sjcss 的回复:

select * from(
select Name, Type ,Date from A1.dbo.表名
union all
select Name, Type, Date from A2.dbo.表名
union all
select Name, Type ,Date from A3.dbo.表名
...) order by id

……


可以同时对对个数据库进行查询吗?求解

#9


引用 7 楼 gogodiy 的回复:
这么大的数据量放到一起查询?光放到一起就要花不少时间了。
如果你们仅仅是需要查询这些数据的话,我建议你们专门做一个OLAP数据库用于统一存放这些数据,该数据库可以为读取性能做优化,每天定时使用SSIS包将当天的数据从其他数据库转移过来,然后所有的查询都对该数据库进行操作,这样不会影响到其他数据库在实际生产中的写操作。然后你们还可以使用SSRS生成专门的报表,再利用Microsoft Offic……

那不等于冗余了1倍的数据量?分区表该怎么做啊?

#10


用分區表,設法將10個同名表歸為一個庫下的表(需要修改一下前端程序),

然後對於這一個庫下的"總表"進行分區, 記得不同分區對應到不同文件組,

不同文件組對應到不同磁盤分區或磁盤陣列, 這樣性能會比現在好很多.

#11


引用 10 楼 ap0405140 的回复:
用分區表,設法將10個同名表歸為一個庫下的表(需要修改一下前端程序),

然後對於這一個庫下的"總表"進行分區, 記得不同分區對應到不同文件組,

不同文件組對應到不同磁盤分區或磁盤陣列, 這樣性能會比現在好很多.

噢,我再去研究研究分区表

#1


select * from(
select Name, Type ,Date from A1.dbo.表名
union all 
select Name, Type, Date from A2.dbo.表名
union all 
select Name, Type ,Date from A3.dbo.表名
...) order by id

#2


设想将要查询数据的总量超过1000万或1亿

这个估计得考虑分区表了。单纯的UNION ALL效率是不会很高的

#3


引用 1 楼 sjcss 的回复:
select * from(
select Name, Type ,Date from A1.dbo.表名
union all 
select Name, Type, Date from A2.dbo.表名
union all 
select Name, Type ,Date from A3.dbo.表名
...) order by id

这个根本不行,是10个不同库中,10个相同名字的表啊

#4


引用 2 楼 fredrickhu 的回复:
设想将要查询数据的总量超过1000万或1亿

这个估计得考虑分区表了。单纯的UNION ALL效率是不会很高的


分区表怎么做,求解?

#5


引用 2 楼 fredrickhu 的回复:
设想将要查询数据的总量超过1000万或1亿

这个估计得考虑分区表了。单纯的UNION ALL效率是不会很高的

而且,经常不是为了查询单一记录,而是要查询几乎全表的记录,来计算总量之类的操作

#6


如果你没有大把的银子,那劝你去买十台普通的商用机,每台机上都装上SQLSERVER,每台机上装一个库,然后想要查询的那个客户端分别向这十个库发出查询请求,所得到的结果合并到客户端,再根据你的要求进行综合处理.

#7


这么大的数据量放到一起查询?光放到一起就要花不少时间了。
如果你们仅仅是需要查询这些数据的话,我建议你们专门做一个OLAP数据库用于统一存放这些数据,该数据库可以为读取性能做优化,每天定时使用SSIS包将当天的数据从其他数据库转移过来,然后所有的查询都对该数据库进行操作,这样不会影响到其他数据库在实际生产中的写操作。然后你们还可以使用SSRS生成专门的报表,再利用Microsoft Office SharePoint Server(MOSS)或者Microsoft Office PerformancePoint Server(PPS)这些软件进行后期开发,组建你们自己的BI模块。

#8


引用 3 楼 zdc198771 的回复:
引用 1 楼 sjcss 的回复:

select * from(
select Name, Type ,Date from A1.dbo.表名
union all
select Name, Type, Date from A2.dbo.表名
union all
select Name, Type ,Date from A3.dbo.表名
...) order by id

……


可以同时对对个数据库进行查询吗?求解

#9


引用 7 楼 gogodiy 的回复:
这么大的数据量放到一起查询?光放到一起就要花不少时间了。
如果你们仅仅是需要查询这些数据的话,我建议你们专门做一个OLAP数据库用于统一存放这些数据,该数据库可以为读取性能做优化,每天定时使用SSIS包将当天的数据从其他数据库转移过来,然后所有的查询都对该数据库进行操作,这样不会影响到其他数据库在实际生产中的写操作。然后你们还可以使用SSRS生成专门的报表,再利用Microsoft Offic……

那不等于冗余了1倍的数据量?分区表该怎么做啊?

#10


用分區表,設法將10個同名表歸為一個庫下的表(需要修改一下前端程序),

然後對於這一個庫下的"總表"進行分區, 記得不同分區對應到不同文件組,

不同文件組對應到不同磁盤分區或磁盤陣列, 這樣性能會比現在好很多.

#11


引用 10 楼 ap0405140 的回复:
用分區表,設法將10個同名表歸為一個庫下的表(需要修改一下前端程序),

然後對於這一個庫下的"總表"進行分區, 記得不同分區對應到不同文件組,

不同文件組對應到不同磁盤分區或磁盤陣列, 這樣性能會比現在好很多.

噢,我再去研究研究分区表