作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一张 table cats
42,795,120 行。
显然这是很多行。所以当我这样做时:
/* owner_cats is a many-to-many join table */
DELETE FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)
CommandTimeout
值,默认值只有 30 秒)
TRUNCATE TABLE cats
因为我不想吹走其他主人的猫。
DELETE TOP (25) PERCENT FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)
DELETE TOP(50) PERCENT FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)
DELETE FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)
DELETE
在 SQL Server 2005 中?
id_cat
不是PK,因为在我的现实生活模式中,它不是一个独特的领域。
cats.id_cat
owner_cats.id_cat
owner_cats.id_owner
JOIN
的索引。字段对吗?
SqlBulkCopy
(以块为单位,而不是一次全部为 4200 万个)。我有一些索引和 PK。我阅读了以下帖子,这些帖子证实了我的理论,即即使是批量复制,索引也会减慢速度:
DROP
我在复制之前的索引然后重新
CREATE
他们完成后。
DELETE
FROM cats c
WHERE EXISTS (SELECT 1
FROM owner_cats o
WHERE o.id_cat = c.id_cat
AND o.id_owner = 1)
CommandTimeout=60000;
默认为 30 秒)DELETE FROM WHERE EXISTS (SELECT 1 ...)
因为它的执行速度要快一点 DROP
运行删除语句之前的所有索引和 PK (???) DELETE
声明CREATE
所有索引和 PK TRUNCATE
快并从第一个
owner_id
开始重新开始我的负载,因为我的一个
owner_id
加载需要 2:30 小时:分钟,而我刚刚用 4200 万行描述的删除过程需要 17:22 分钟:秒。 (注意:如果我的加载过程抛出异常,我会重新开始处理
owner_id
,但我不想吹走之前的
owner_id
,所以我不想
TRUNCATE
owner_cats
表,这就是我尝试使用
DELETE
的原因。)
最佳答案
没有实际的阈值。这取决于您的连接上的命令超时设置。
请记住,删除所有这些行所需的时间取决于:
关于sql - 使用相关子查询删除 4200 万行表的 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428345/
我是一名优秀的程序员,十分优秀!