Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将5亿个表与另一个5亿个表合并_Sql_Sql Server - Fatal编程技术网

Sql 如何将5亿个表与另一个5亿个表合并

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万行,它将运行数天,如果机器重新启动,它将使数据库进入恢复模式,然后我必须重新开始 为什么要合并这些

我必须合并两个500米以上的行表

合并它们的最佳方法是什么

如果有人在我的网页上搜索,我只需要显示这两个SQL Server表中的记录

这些是固定的表,一旦这些表处于活动状态,任何人都不会更改其中的数据

create a view myview as select * from table1 union select * from table2 
使用上述方法是否有任何危害

如果我开始合并500万行,它将运行数天,如果机器重新启动,它将使数据库进入恢复模式,然后我必须重新开始

为什么要合并这些表?

  • 我有一个网站,提供了对人名表的搜索
  • 此表包含名称、地址、年龄等列
  • 我们得到了5亿个类似的.txt文件,我们将它们加载到了其他一些文件中 桌子
  • 现在我们希望网站搜索页面查询这两个表,看看是否 桌子上有一个人
  • 我们得到了类似的1亿或2000万的.txt文件,我们加载了这些文件 到这张大桌子上去
我们目前是如何做的?

  • 我们将.txt文件导入到单独的表中(某些列是不同的) (在.txt中)
  • 然后我们排列列并进行数据类型转换
  • 然后将此暂存表插入liveCopy巨表(在 测试环境)
我们有SQLServer2008R2

  • 我们可以使用表分区来提高性能吗
  • 是否可以创建每月一次的小表格,并在上面创建一个视图 他们
  • 在这种情况下如何建立索引
我们一个月只加载一次新数据,并进行选择

复制是否有帮助

我面临的最大问题是管理大型表格。

我希望我能解释一下情况


感谢和问候

如果您的目的真的只是将数据从两个表移动到一个表中,那么您将希望分批执行—一次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