zoukankan      html  css  js  c++  java
  • 在Sql server 中删除大数据量表时的方法

    在删除一个拥有将近2000万条记录的表时,用简单的delete操作,发现即使只是删除几万条数据都要很长的运行时间,可能的原因我猜想大概有:(1)每一条记录的delete操作都会在数据库日志中加以记录;(2)表上的索引重建也导致比较耗时的操作。

    在参考网上的一些建议之后,并根据实际情况:(1)确定要删除的数据并不打算做日志回滚;(2)通过减少数据量后重建索引或许速度并不见得慢多少。因此决定采用truncate table来操作。

    (1)复制出需要保留的数据:

    select * into table2 from table1 where id>100000;

    (2)用truncate table删除原表中的数据,使用truncate table时,将删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。因而效率很高。

    truncate table table1;

    (3)回写保留下来的数据

    insert into table1 select * from table2

    (4)删除临时数据表

    drop table table2

    ------------------------------------------------------------------------------------------

    有关truncate table的一些描述在sql server的帮助文档中有详细描述,这里抄录如下:

    Code
  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/mincyw/p/1299748.html
Copyright © 2011-2022 走看看