请问,Sql server 数据库中,多个结构相同的表如何关联查询

时间:2021-11-25 14:48:59
大家好,我想请问一下,我有一个大数据,以月创建数据库,例如DB2014-04,DB2014-05,然后在每个数据库中自动以天创建数据库表,例如Table2014-04-01,Table2014-05-05,表内的结果是相同的,每个表中存当天的数据,这样如果搜索数据时,需要把多个库的多个表的数据内容合起来显示,例如我从2014-04-01,查询到2014-05-05,我需要把两个库的35个表的数据合并显示,如何做呢?
O(∩_∩)O谢谢

15 个解决方案

#1


和并显示不是不可以,不过这样做一次性要联结那么多库效率可能不高。
看楼主这数据库的设计想必每天的数据量都很大,那么抽取的数据应该是按天做集计显示的吧,如果是我猜想的这样,那楼主大可做一张统计表,预先统计好了直接查询出来。

#2


你好,你的回答我理解,但是如果我搜索的两个时间段不是固定的,可能跨多个表或者多个库,要如何实现呢

#3


引用 2 楼 dongwang521 的回复:
你好,你的回答我理解,但是如果我搜索的两个时间段不是固定的,可能跨多个表或者多个库,要如何实现呢

首先数据库的设计源于实际工作,要从需求出发,所以还是要问下楼主,查询时间段内的表时,是展示所有数据还是以“日”为一条数据展示单位

#4


会显示所有的数据的

#5


如果表结构还未定型,
且每天记录数少于1千万条,建议改为 分区表 。。。。
否则,也尽量在一个库吧,只要库文件分布到多个磁盘

现在,如果程序查询,可以有程序根据日期范围,同时向多个表查询,结果再合并返回给用户
union后再查,无法使用索引,可能性能差很多

#6


那就只能[数据库].[表]的方式uinon起来,如果跨服务器还得加上服务器别名
当然如果数据基本不变的话可以考虑用视图

#7


引用 5 楼 sz_haitao 的回复:
如果表结构还未定型,
且每天记录数少于1千万条,建议改为 分区表 。。。。
否则,也尽量在一个库吧,只要库文件分布到多个磁盘

现在,如果程序查询,可以有程序根据日期范围,同时向多个表查询,结果再合并返回给用户
union后再查,无法使用索引,可能性能差很多
你好,我问一下分区表查询效率会很快吗,我可以每天分一个区吗

#8


引用 6 楼 xdashewan 的回复:
那就只能[数据库].[表]的方式uinon起来,如果跨服务器还得加上服务器别名
当然如果数据基本不变的话可以考虑用视图

你说的数据基本不变是什么意思,用视图是插入数据的时候自动生成视图了吗,查询的时候相当于查询一个表吗?

#9


引用 8 楼 dongwang521 的回复:
Quote: 引用 6 楼 xdashewan 的回复:

那就只能[数据库].[表]的方式uinon起来,如果跨服务器还得加上服务器别名
当然如果数据基本不变的话可以考虑用视图

你说的数据基本不变是什么意思,用视图是插入数据的时候自动生成视图了吗,查询的时候相当于查询一个表吗?

不变的意思是,不会经常做如insert,update等操作,因为这样会使视图的索引失效,降低查询效率。所以如果表的数据经常变动就不推荐用视图

#10


引用 7 楼 dongwang521 的回复:
Quote: 引用 5 楼 sz_haitao 的回复:

如果表结构还未定型,
且每天记录数少于1千万条,建议改为 分区表 。。。。
否则,也尽量在一个库吧,只要库文件分布到多个磁盘

现在,如果程序查询,可以有程序根据日期范围,同时向多个表查询,结果再合并返回给用户
union后再查,无法使用索引,可能性能差很多
你好,我问一下分区表查询效率会很快吗,我可以每天分一个区吗


sql2005只能 一个分区表最多100个区
不知道最新的sql2014最多能分多少个区

#11


@xdashewan
这个表操作会比较频繁,经常有插入和更新操作,因此视图不行啊

#12


二位,我现在是所有数据都在一个表中,而且数据是持续增长并且不删除的,这样客户端查询数据时遍历的会很慢,而且还需要和其它表关联读取数据,最后显示。因为我想是不是可以把这个表拆分成多个表,这样根据输入的时间段,只是从固定数据中查找,是不是能快点?

#13


非常感谢二位的回答

#14


一般来说对大数据量的表进行效率优化方法是索引,分区,分表。具体根据实际记录数量来处理。

#15


引用 12 楼 dongwang521 的回复:
二位,我现在是所有数据都在一个表中,而且数据是持续增长并且不删除的,这样客户端查询数据时遍历的会很慢,而且还需要和其它表关联读取数据,最后显示。因为我想是不是可以把这个表拆分成多个表,这样根据输入的时间段,只是从固定数据中查找,是不是能快点?


交易表,多插入,实时要求高,保留的记录数不用太多,定时移到历史库
历史表,记录很多,不会删改,只有定时的批量插入,可以放到另一个服务器都可以

#1


和并显示不是不可以,不过这样做一次性要联结那么多库效率可能不高。
看楼主这数据库的设计想必每天的数据量都很大,那么抽取的数据应该是按天做集计显示的吧,如果是我猜想的这样,那楼主大可做一张统计表,预先统计好了直接查询出来。

#2


你好,你的回答我理解,但是如果我搜索的两个时间段不是固定的,可能跨多个表或者多个库,要如何实现呢

#3


引用 2 楼 dongwang521 的回复:
你好,你的回答我理解,但是如果我搜索的两个时间段不是固定的,可能跨多个表或者多个库,要如何实现呢

首先数据库的设计源于实际工作,要从需求出发,所以还是要问下楼主,查询时间段内的表时,是展示所有数据还是以“日”为一条数据展示单位

#4


会显示所有的数据的

#5


如果表结构还未定型,
且每天记录数少于1千万条,建议改为 分区表 。。。。
否则,也尽量在一个库吧,只要库文件分布到多个磁盘

现在,如果程序查询,可以有程序根据日期范围,同时向多个表查询,结果再合并返回给用户
union后再查,无法使用索引,可能性能差很多

#6


那就只能[数据库].[表]的方式uinon起来,如果跨服务器还得加上服务器别名
当然如果数据基本不变的话可以考虑用视图

#7


引用 5 楼 sz_haitao 的回复:
如果表结构还未定型,
且每天记录数少于1千万条,建议改为 分区表 。。。。
否则,也尽量在一个库吧,只要库文件分布到多个磁盘

现在,如果程序查询,可以有程序根据日期范围,同时向多个表查询,结果再合并返回给用户
union后再查,无法使用索引,可能性能差很多
你好,我问一下分区表查询效率会很快吗,我可以每天分一个区吗

#8


引用 6 楼 xdashewan 的回复:
那就只能[数据库].[表]的方式uinon起来,如果跨服务器还得加上服务器别名
当然如果数据基本不变的话可以考虑用视图

你说的数据基本不变是什么意思,用视图是插入数据的时候自动生成视图了吗,查询的时候相当于查询一个表吗?

#9


引用 8 楼 dongwang521 的回复:
Quote: 引用 6 楼 xdashewan 的回复:

那就只能[数据库].[表]的方式uinon起来,如果跨服务器还得加上服务器别名
当然如果数据基本不变的话可以考虑用视图

你说的数据基本不变是什么意思,用视图是插入数据的时候自动生成视图了吗,查询的时候相当于查询一个表吗?

不变的意思是,不会经常做如insert,update等操作,因为这样会使视图的索引失效,降低查询效率。所以如果表的数据经常变动就不推荐用视图

#10


引用 7 楼 dongwang521 的回复:
Quote: 引用 5 楼 sz_haitao 的回复:

如果表结构还未定型,
且每天记录数少于1千万条,建议改为 分区表 。。。。
否则,也尽量在一个库吧,只要库文件分布到多个磁盘

现在,如果程序查询,可以有程序根据日期范围,同时向多个表查询,结果再合并返回给用户
union后再查,无法使用索引,可能性能差很多
你好,我问一下分区表查询效率会很快吗,我可以每天分一个区吗


sql2005只能 一个分区表最多100个区
不知道最新的sql2014最多能分多少个区

#11


@xdashewan
这个表操作会比较频繁,经常有插入和更新操作,因此视图不行啊

#12


二位,我现在是所有数据都在一个表中,而且数据是持续增长并且不删除的,这样客户端查询数据时遍历的会很慢,而且还需要和其它表关联读取数据,最后显示。因为我想是不是可以把这个表拆分成多个表,这样根据输入的时间段,只是从固定数据中查找,是不是能快点?

#13


非常感谢二位的回答

#14


一般来说对大数据量的表进行效率优化方法是索引,分区,分表。具体根据实际记录数量来处理。

#15


引用 12 楼 dongwang521 的回复:
二位,我现在是所有数据都在一个表中,而且数据是持续增长并且不删除的,这样客户端查询数据时遍历的会很慢,而且还需要和其它表关联读取数据,最后显示。因为我想是不是可以把这个表拆分成多个表,这样根据输入的时间段,只是从固定数据中查找,是不是能快点?


交易表,多插入,实时要求高,保留的记录数不用太多,定时移到历史库
历史表,记录很多,不会删改,只有定时的批量插入,可以放到另一个服务器都可以