MSSQL-有关插入查询的运行方式的问题

时间:2018-09-04 07:39:30

标签: sql sql-server insert

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

运行查询时,查询一直在进行。一个小时,它一直在运行。我们确定这是因为行数很大。

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

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

2 个答案:

答案 0 :(得分:2)

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

select count(*) from table2 WITH (NOLOCK) 

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

答案 1 :(得分:0)

没有数据被一个接一个地插入或更新。

我不知道它与 getVoice(text, currentVoice) { let voi = currentVoice; let awsCredentials = new AWS.Credentials("xxxxxxxxxx", "xxxxxxxx"); let settings = { awsCredentials: awsCredentials, awsRegion: "us-west-1", cacheSpeech: false } AWS.config.credentials = settings.awsCredentials; AWS.config.region = settings.awsRegion; let speechfile = new Promise(function (successCallback, errorCallback) { var polly = new AWS.Polly(); var params = { LanguageCode: "en-US", OutputFormat: 'mp3', TextType: "ssml", Text: text, VoiceId: voi } polly.synthesizeSpeech(params, function (error, data) { if (error) { errorCallback(error) } else { //alert(text + data.AudioStream); let audiostream = data.AudioStream; successCallback(audiostream); } }); }); return speechfile; // end getVoice } 有什么关系

"Select count(*) from table2 WITH (NOLOCK) "花费的时间太长,无法产生Join condition,将由insert运算符使用。因此实际上没有插入,因为没有结果集。

加入查询花费的时间太长,因为“左加入”条件会产生非常高的Resultset

所以必须先解决Join条件。

需要其他信息,例如表架构,数据类型和长度以及现有索引,要求。