96得票7回答
在PostgreSQL中进行非常慢的DELETE操作,有没有解决方法?

我在PostgreSQL 9.2上有一个数据库,其中包含一个主模式和大约70个表,以及一个可变数量的每个客户模式,每个模式中有30个相同结构的表。客户模式具有引用主模式而不是反向引用的外键。 我刚开始用一些真实数据填充数据库,这些数据来自之前的版本。当我在主模式中的一个非常核心的表中执行批量...

46得票6回答
我需要运行VACUUM FULL,但磁盘空间不足。

我有一张表占用了服务器硬盘空间的近90%。我决定删除一些列来释放空间。但是我需要将空间返回给操作系统。问题是,如果我运行VACUUM FULL并且没有足够的空闲空间来复制表,我不确定会发生什么。 我知道不应该使用VACUUM FULL,但在这种情况下我认为这是最好的选择。 如果有任何想法,...

46得票9回答
在数据库中,应该如何处理删除操作?

我想在一个网络应用中实现一个“撤销删除”功能,使用户可以改变主意并恢复已删除的记录。对于如何实现这一点,我有一些想法。我考虑过的一些选项是实际上删除相关记录,并将更改存储在单独的审计表中,或者不删除记录,而是使用一个布尔型的“已删除”列来标记它为已删除。后一种解决方案需要额外的应用逻辑,在正常...

40得票2回答
PostgreSQL中批量删除行的最高效方法

我想知道从PostgreSQL中删除大量行的最有效方法是什么,这个过程将成为每天定期任务的一部分,用于批量导入数据(插入和删除的增量)到一个表中。可能会有数千甚至数百万行需要删除。 我有一个包含主键的文件,每行一个主键。我考虑的两个选项如下,但我对PostgreSQL的内部机制了解不够,无法...

39得票5回答
加快没有条件的大型DELETE FROM <table>的方法 要加快执行没有条件的大型DELETE FROM <table>语句,有几种方法可以尝试。 首先,确保数据库服务器的性能良好。检查服务器的硬件配置和资源利用情况,确保它具备足够的处理能力来处理大型删除操作。如果可能的话,增加服务器的内存和处理器核心数量,以提高性能。 其次,优化数据库表的结构。使用索引来加速删除操作,特别是在WHERE子句中使用的列上创建索引。索引可以帮助数据库更快地定位和删除匹配的行。 另外,考虑分批删除数据。将大型删除操作分成多个较小的批次,每次删除一部分数据。这样做可以减轻数据库的负载,并且可以更有效地利用系统资源。 还可以禁用触发器和约束。在执行大型删除操作时,暂时禁用与被删除表相关的触发器和约束,可以提高删除操作的执行速度。但请注意,在禁用这些功能之前,确保没有破坏数据完整性的风险。 最后,定期进行数据库维护和优化。清理无用的数据、重新组织表和索引等操作可以提高数据库的性能,并减少删除操作所需的时间。 总之,通过优化服务器性能、优化表结构、分批删除数据、禁用触发器和约束以及进行数据库维护和优化,可以加快执行没有条件的大型DELETE FROM <table>语句的速度。

使用SQL Server 2005。 我正在执行一个没有任何条件的大型DELETE FROM操作。基本上相当于TRUNCATE TABLE语句 - 只是我不允许使用TRUNCATE。问题是表非常庞大 - 1000万行,完成需要超过一个小时。有没有办法在不使用以下方法的情况下加快速度: 使...

34得票1回答
删除未在其他表中引用的行。

我在一个PostgreSQL 9.3数据库中有两个表:表link_reply有一个名为which_group的外键,指向表link_group。 我想删除所有在link_group中没有相关行在link_reply中存在的行。听起来很基本,但是我一直在努力解决它。 会不会像这样简单(但是不...

31得票2回答
Postgres自动过期(删除)旧记录

Postgres有没有支持自动删除旧记录的功能? 我想将Postgres用于日志记录,作为一种队列,其中超过两周的记录(日志事件)会自动删除。

30得票4回答
如何找出谁删除了SQL Server中的某些数据 要找出在SQL Server中删除了某些数据的人,可以采取以下步骤: 1. 查看数据库日志:SQL Server会记录所有对数据库的更改操作,包括删除数据。通过检查数据库的事务日志,您可以找到已删除数据的相关信息。 2. 使用系统函数:SQL Server提供了一些系统函数,可以帮助您查找删除操作的相关信息。例如,使用fn_dblog函数可以分析数据库日志并显示删除操作的详细信息。 3. 考虑审计功能:SQL Server还提供了审计功能,可用于跟踪和监视对数据库的操作。通过启用审计功能,并设置适当的跟踪策略,您可以捕获和记录删除操作的相关信息。 4. 检查登录凭据:如果有多个用户访问数据库,您可以检查每个用户的登录凭据,以确定是否有权限删除数据。 5. 调查其他相关信息:除了上述方法外,您还可以与相关人员进行沟通,询问他们是否知道有关删除数据的任何信息。这可能涉及与数据库管理员、开发人员或其他相关人员的交流。 请注意,以上方法仅供参考,并且最终结果可能受到不同因素的影响。建议在实施任何操作之前,先备份数据库以防止数据丢失或损坏。

我的老板昨天收到一个客户的查询,询问如何找出谁在他们的SQL Server数据库中删除了一些数据(如果有关系的话,这是Express版本)。 我认为可以从事务日志中找到这个信息(前提是它没有被截断)- 这样做是正确的吗?如果是的话,具体如何查找这些信息呢?

24得票2回答
触发器:将已删除的行移动到归档表

我在我的PostgreSQL数据库中有一个小表(约10行),名为restrictions,其中的值每天都会被删除和插入。 我想要一个名为restrictions_deleted的表,每当从restrictions中删除一行时,它将自动存储。由于restrictions具有序列id,所以不会有...

24得票6回答
在一个拥有三千万行的表上,DELETE命令无法完成。

我继承了一个数据库,现在想要清理和加快它的速度。我有一张包含3000万行数据的表格,其中很多是由于我们程序员的错误而插入的垃圾数据。在添加任何新的、更优化的索引之前,我将表格从MyISAM转换为InnoDB,并且打算删除很多包含垃圾数据的行。 这个数据库是MySQL 5.0版本,我拥有服务器...