This topic has been archived. It cannot be replied.
-
工作学习 / 学科技术 / 一个数据库问题,从500m记录数的表里,删除8m记录,记录大小约1k,如果有日期索引,需要多长时间?我猜是几分钟,请问接近吗?请不要延深到机器性能,存储性能。假设p7的笔记本,普通硬盘。
-remdesivir(larevo);
2021-10-26
{58}
(#14067715@0)
-
p7 是啥? 啥数据库?
-netant(网蚁);
2021-10-26
(#14067746@0)
-
不可以test一下吗?先clone 一个test table 把要删除的data放进去,然后run delete from clone table
-afterrain(afterrain);
2021-10-26
(#14068677@0)
-
我想问一下大概时间,是几分钟,还是几个小时
-remdesivir(larevo);
2021-10-26
(#14068694@0)
-
我觉得这种上m的删除还是事先test一下再上product 比较安全些吧?!尤其如果是data warehouse, 有的table column 很多
-afterrain(afterrain);
2021-10-27
(#14070486@0)
+1
-
一般大规模删前会关了索引,更新索引很花时间,
-googlebot(bot);
2021-10-26
(#14068711@0)
-
要是删除指定日期区间的记录,应该特别快吧
-moonhalf(走啊走);
2021-10-26
(#14068715@0)
-
十分钟够了吧?
-remdesivir(larevo);
2021-10-26
(#14068720@0)
-
你这十分钟都过去了哈。等你的一手经验
-moonhalf(走啊走);
2021-10-26
(#14068722@0)
+1
-
八成还没开始删呢,如果m = million,想一次删完的话的话😂
-piglet(小猪);
2021-10-27
(#14070764@0)
+1
-
8m就这么费劲?Sql server没用过,也不知道他是根据什么删的,删的判定条件有没有索引……但是按楼上说的,关了索引再一点点删,就算都遍历一遍,顶多半小时吧
-moonhalf(走啊走);
2021-10-27
(#14071155@0)
-
我理解楼主的意思是一步删完, all or none。大型服务器有可能几秒钟完成,楼主的笔记本可能得用几个小时,或干脆做不了。数据库的acid就是得保证你做了99%却遭遇不测的情况下还能roll back.
-piglet(小猪);
2021-10-27
(#14071421@0)
-
Sql server不象oracle 可以roll back, 除非用t-sql把roll back 加在script 里面
-afterrain(afterrain);
2021-10-28
(#14072765@0)
-
俺说的是不可控的意外,每个语句是一个implicit transaction, 执行时间太长了什么事儿都可能发生,比如楼主的笔记本淬了😂,只要数据库还可以起来,就是all or none。 其实通常没有这么高的要求,慢慢删,每次删一二千条,中间最好停几秒,啥都不影响。
-piglet(小猪);
2021-10-28
(#14073407@0)
-
拷贝不删除的记录到新表,然后建索引,改回原来的名字。
-james4rn(james);
2021-10-27
(#14071085@0)
+2
-
这确实有可能是最快的办法,如果空间够的话,坏处是有瞬间的离线,如果有foreign key的话得具体考虑。
-piglet(小猪);
2021-10-27
(#14071423@0)
+2
-
不删除的是492m, copy这个比删除8m更慢吧?
-afterrain(afterrain);
2021-10-28
(#14072776@0)
-
数据库的快慢真不是计算速度,而是log速度,不需要log的命令就快,比如select into。 当然影响因素很多,试试才能确定。
-piglet(小猪);
2021-10-28
(#14073414@0)