我有一个表(table1),该表具有id作为主键并且本质上是增量的。该表具有Updatedtm,后者具有最后更新的日期和时间。该表有大约3亿条记录。我有另一个表table2与table1同步。从表1中删除ID时,从表2中删除的最佳方法是什么? Left Join是一种有效的方法,我是否每次都必须比较3亿条记录以检查是否删除?
'use strict';
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch({ headless: false });
const [page] = await browser.pages();
await page.goto('https://example.org/');
await page.evaluate(() => {
document.body.appendChild(document.createElement('iframe')).src = 'https://example.net/';
document.body.appendChild(document.createElement('iframe')).src = 'https://example.com/';
});
for (const frame of page.frames()) {
await frame.waitForSelector('head > title');
await frame.evaluate(() => {
localStorage.setItem('foo', document.location.href);
localStorage.setItem('bar', document.title);
});
}
const client = await page.target().createCDPSession();
for (const frame of page.frames()) {
const securityOrigin = new URL(frame.url()).origin;
const response = await client.send(
'DOMStorage.getDOMStorageItems',
{ storageId: { isLocalStorage: true, securityOrigin } },
);
console.log(response.entries);
}
console.log('----------');
for (const frame of page.frames()) {
const entries = await frame.evaluate(() => {
const data = [];
for (var i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
data[i] = [key, localStorage.getItem(key)];
}
return data;
});
console.log(entries);
}
await browser.close();
} catch (err) {
console.error(err);
}
})();
答案 0 :(得分:0)
确保您具有涵盖此查询的索引。即确保对table1.id
和table2.id
进行了索引(是的,即使认为索引需要更新,拥有此索引也可以加快删除速度。)这将有助于JOIN
。 / p>
此外,您可能要考虑批量删除,
WHILE <some_condition> BEGIN
DELETE TOP (1000) t2
FROM table2 t2
LEFT OUTER JOIN table1 t1 ON t2.id = t1.id
WHERE t1.id IS NULL
END
批处理删除操作将减少SQL Server必须在您的表索引,聚集索引和非聚集索引上获取的锁数量。如果这是一台具有3亿行的生产服务器,那么在提出删除策略之前,我肯定会查看您的索引并计算您认为可能要删除的记录数。
SELECT COUNT(*) FROM table2 t2
LEFT OUTER JOIN table1 t1 ON t2.id = t1.id
WHERE t1.id IS NULL
此外,请与所有服务器管理员联系,以了解他们对潜在锁定问题的看法。
答案 1 :(得分:0)
我建议您使用“存在”代替“不在”
Delete from table2 t2
where exists ( select 1 from table1 t1 where t1.id=t2.id)