【问题标题】:How to quickly drop a database table content using Spring?如何使用 Spring 快速删除数据库表内容?
【发布时间】:2014-12-23 16:42:43
【问题描述】:

我正在使用 Spring-data-jpaCrudRepository 将数据保存在 postgres 数据库中。

我想每天更新完整的数据库内容,这意味着首先删除特定表中的所有数据。

存储库提供了一个方法dao.deleteAll(),但由于我有大约 500k 个条目,所以它会持续很长时间。

我该如何改进?

【问题讨论】:

    标签: java spring postgresql jpa spring-data-jpa


    【解决方案1】:

    您可以在实体管理器上执行本机 sql 查询,并截断您的数据库

    String sql = "TRUNCATE tbl_name;";
    entityManager.createNativeQuery(sql).executeUpdate();
    

    【讨论】:

      【解决方案2】:

      TRUNCATE 命令在大型表上要快得多,因为它只是在文件系统级别对文件进行核对,而DELETE 将每个记录标记为空闲而不减小文件大小,并在它们上定义任何触发器运行。

      【讨论】:

      • 如果可能的话,我如何将truncate 与休眠/HQL 一起使用?
      • 请注意,在某些数据库上,如果定义了外键,则不能使用截断,即使实际上没有实际的数据行。
      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多