Sql 如何将5亿个表与另一个5亿个表合并
我必须合并两个500米以上的行表 合并它们的最佳方法是什么 如果有人在我的网页上搜索,我只需要显示这两个SQL Server表中的记录 这些是固定的表,一旦这些表处于活动状态,任何人都不会更改其中的数据Sql 如何将5亿个表与另一个5亿个表合并,sql,sql-server,Sql,Sql Server,我必须合并两个500米以上的行表 合并它们的最佳方法是什么 如果有人在我的网页上搜索,我只需要显示这两个SQL Server表中的记录 这些是固定的表,一旦这些表处于活动状态,任何人都不会更改其中的数据 create a view myview as select * from table1 union select * from table2 使用上述方法是否有任何危害 如果我开始合并500万行,它将运行数天,如果机器重新启动,它将使数据库进入恢复模式,然后我必须重新开始 为什么要合并这些
create a view myview as select * from table1 union select * from table2
使用上述方法是否有任何危害
如果我开始合并500万行,它将运行数天,如果机器重新启动,它将使数据库进入恢复模式,然后我必须重新开始
为什么要合并这些表?
- 我有一个网站,提供了对人名表的搜索
- 此表包含名称、地址、年龄等列
- 我们得到了5亿个类似的.txt文件,我们将它们加载到了其他一些文件中 桌子
- 现在我们希望网站搜索页面查询这两个表,看看是否 桌子上有一个人
- 我们得到了类似的1亿或2000万的.txt文件,我们加载了这些文件 到这张大桌子上去
- 我们将.txt文件导入到单独的表中(某些列是不同的) (在.txt中)
- 然后我们排列列并进行数据类型转换
- 然后将此暂存表插入liveCopy巨表(在 测试环境)
- 我们可以使用表分区来提高性能吗
- 是否可以创建每月一次的小表格,并在上面创建一个视图 他们
- 在这种情况下如何建立索引
感谢和问候如果您的目的真的只是将数据从两个表移动到一个表中,那么您将希望分批执行—一次100K条记录,或者类似的操作。我猜你以前崩溃是因为你的日志满了,尽管这只是猜测。如果您处于完全恢复模式,请确保在每个批处理之后加入检查点
也就是说,我同意您应该提供的所有意见,为什么要这样做?这可能根本没有必要。如果您的目的确实只是将数据从两个表移动到一个表中,那么您将希望分批执行—每次100K条记录,或者类似的操作。我猜你以前崩溃是因为你的日志满了,尽管这只是猜测。如果您处于完全恢复模式,请确保在每个批处理之后加入检查点 也就是说,我同意您应该提供的所有评论,为什么要这样做?这可能根本没有必要。1)通常开发人员为了获得更高的性能,会将大型表拆分为较小的表,并将其称为分区(更准确地说,是水平的,因为还有垂直的)。您的视图就是这样一个示例。当然,它主要用于将大量数据拆分为一系列值(例如,表1包含列[col1]<0的记录,而表2包含列[col1]>=0的记录)。但即使对于未排序的数据,它也可以,因为您有更多的空间来提高速度。例如,如果将表放入不同的存储器,则并行读取。所以这是一个很好的选择 2) 另一种方法是使用SQL Server 2008及更高版本中支持的合并语句 3) 当然,您可以使用INSERT+DELETE进行复制,但在这种情况下,或者在使用MERGE命令的情况下,可以小批量执行此操作。Smth类似:
SET ROWCOUNT 10000
DECLARE @Count [int] = 1
WHILE @Count > 0 BEGIN
... INSERT+DELETE/MERGE transcation...
SET @Count = @@ROWCOUNT
END
1) 通常,开发人员为了获得更高的性能,会将大型表拆分为较小的表,并将其称为分区(更准确地说是水平的,因为还有垂直的)。您的视图就是这样一个示例。当然,它主要用于将大量数据拆分为一系列值(例如,表1包含列[col1]<0的记录,而表2包含列[col1]>=0的记录)。但即使对于未排序的数据,它也可以,因为您有更多的空间来提高速度。例如,如果将表放入不同的存储器,则并行读取。所以这是一个很好的选择
2) 另一种方法是使用SQL Server 2008及更高版本中支持的合并语句
3) 当然,您可以使用INSERT+DELETE进行复制,但在这种情况下,或者在使用MERGE命令的情况下,可以小批量执行此操作。Smth类似:
SET ROWCOUNT 10000
DECLARE @Count [int] = 1
WHILE @Count > 0 BEGIN
... INSERT+DELETE/MERGE transcation...
SET @Count = @@ROWCOUNT
END
您可能需要查看索引视图。
通过这种方式,您可以在视图上设置索引,并从中获得最佳性能。使用索引视图最昂贵的部分是CRUD操作,但对于读取性能而言,这将是最好的解决方案
您可能需要查看索引视图。
通过这种方式,您可以在视图上设置索引,并从中获得最佳性能。使用索引视图最昂贵的部分是CRUD操作,但对于读取性能而言,这将是最好的解决方案
如果两个表一对一地链接,那么每次读取都会浪费大量cpu时间。特别是你提到的表格根本没有变化。在这种情况下,您应该只有一个表。 尝试创建一个新表,包括(至少)两个表中的两列。 您可以通过以下方式完成此操作: 选择新表格
from A left join B on A.x=B.y
或者(如果某些人没有文本文件的信息)
选择新表格
from A inner join B on A.x=B.y
请注意,您必须至少对连接字段建立索引(以加快进程)
关于字段的更多详细信息也可能有助于给出更精确的答案。如果两个表一一链接,那么每次读取都会浪费大量cpu时间。特别是你提到的表格根本没有变化。在这种情况下,您应该只有一个表。 尝试创建一个新的表i