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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSSQL - 有关插入查询如何运行的问题相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

select count(*) from table2 WITH (NOLOCK) 

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

另一答案

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

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

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

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

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

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

以上是关于MSSQL - 有关插入查询如何运行的问题的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 python 中处理 graphql 查询和片段?

html 有关如何在任何页面上插入Nuvo Express按钮的小片段。此按钮居中对齐,并在新窗口中打开目标URL。

MSSQL 查询执行计划缓存和 JDBC

Microsoft SQL Server 代码片段收集

MSSQL 到 MYSQL - 从 MSSQL 中选择,插入 MySQL

数据未插入 MSSQL Python