我们有两个要合并的表。说,表1和表2。 它们具有完全相同的列,并且具有完全相同的目的。区别在于table2具有更新的数据。 我们使用了一个使用LEFT JOIN的查询来查找它们之间的共同行,并在合并时跳过这些行。问题是这样的。两个表都有500M行。
运行查询时,查询一直在进行。一个小时,它一直在运行。我们确定这是因为行数很大。
但是当我们想查看已经向table2中插入了多少行时,我们运行了代码select count(*) from table2
,它为我们提供了与开始时table2完全相同的行数。
我们的问题是,应该如何?找到所有匹配项后,是否同时插入所有行?
答案 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条件。
需要其他信息,例如表架构,数据类型和长度以及现有索引,要求。