我不确定PostgreSQL的delete语法是否能让你像update语句和FROM子句一样“连接”,或者像另一个SQL实现让你运行“DELETE X FROM t1 AS X JOIN t2 AS Y USING(row_id);“,例如。 您可以在来自1个表的DELETE语句中使用WHERE子句,因此,如果删除条件取决于其他表中的记录,则首先编译符合条件的主键值列表可能会有好处(使用SELECT查询和您想要的任意多个JOIN),然后将键值列表传递到DELETE查询的简单WHERE子句中,因为WHERE子句中复杂的依赖于行的子查询可能比这慢。 为了提高服务器内存/资源效率,将查询/行查找操作分开也可能是有意义的(键值的SELECT)从存储修改操作(DELETE),而且我也听说过它被建议批量运行DELETE部分(比如一次100000行)以在存储器和日志上具有较轻的占用,但我不确定这在PostgreSQL中是明智的还是不必要的,也不确定它在不同的实现中是否会有所不同。 处理大数据集的一个普遍主题是,连续的小步骤或小块通常比大的复杂的单个动作执行得更好,后者很难一次提升太多东西。 如果您有一个简单的删除条件,可以直接放入目标表的WHERE子句中,并且您没有数百万行,那么最简单的“DELETE FROM _ WHERE _”查询可能会很好地为您服务。
1条答案
按热度按时间yftpprvb1#
我不确定PostgreSQL的delete语法是否能让你像update语句和FROM子句一样“连接”,或者像另一个SQL实现让你运行“DELETE X FROM t1 AS X JOIN t2 AS Y USING(row_id);“,例如。
您可以在来自1个表的DELETE语句中使用WHERE子句,因此,如果删除条件取决于其他表中的记录,则首先编译符合条件的主键值列表可能会有好处(使用SELECT查询和您想要的任意多个JOIN),然后将键值列表传递到DELETE查询的简单WHERE子句中,因为WHERE子句中复杂的依赖于行的子查询可能比这慢。
为了提高服务器内存/资源效率,将查询/行查找操作分开也可能是有意义的(键值的SELECT)从存储修改操作(DELETE),而且我也听说过它被建议批量运行DELETE部分(比如一次100000行)以在存储器和日志上具有较轻的占用,但我不确定这在PostgreSQL中是明智的还是不必要的,也不确定它在不同的实现中是否会有所不同。
处理大数据集的一个普遍主题是,连续的小步骤或小块通常比大的复杂的单个动作执行得更好,后者很难一次提升太多东西。
如果您有一个简单的删除条件,可以直接放入目标表的WHERE子句中,并且您没有数百万行,那么最简单的“DELETE FROM _ WHERE _”查询可能会很好地为您服务。