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