×

Loading...

@Vancouver

Topic

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