MSSQL - 有关插入查询如何运行的问题

问题描述 投票:1回答:2

我们有两个表要合并。比如说table1和table2。它们具有完全相同的列,并且具有完全相同的目的。不同之处在于table2具有更新的数据。我们使用了一个使用LEFT JOIN的查询来查找它们之间常见的行,并在合并时跳过这些行。问题是这个。两个表都有500M行。

当我们运行查询时,它一直在继续。它持续了一个小时。我们确定这是因为行数很多。

但是当我们想看看已经向table2插入了多少行时,我们运行了代码select count(*) from table2,它给了我们与开始时相同的table2行数。

我们的问题是,它应该是怎样的?在找到所有匹配项后,是否同时插入所有行?

sql sql-server insert
2个回答
2
投票

如果您想读取未提交的数据,则应该修改计数,如下所示:

select count(*) from table2 WITH (NOLOCK) 

NOLOCK过度使用,但在这种特定情况下,它可能很方便。


0
投票

没有数据逐个插入或更新。

我不知道它与"Select count(*) from table2 WITH (NOLOCK) "有什么关系

Join condition花费太长时间来生成将由插入运算符使用的Resultset。因此实际上没有插入,因为没有生成结果集。

连接查询花费的时间太长,因为左连接条件产生非常高的cardinality estimate

所以必须首先修复加入条件。

为此需要其他信息,如表模式,数据类型和长度以及现有索引,要求。

© www.soinside.com 2019 - 2024. All rights reserved.