Mur*_*foX 3 sql postgresql optimization sql-delete
假设我有一个包含200k +行的表的数据库.
这个表有一个id为1800的固定元组.其余的元组序列从300k +开始.
我需要清理这个表,删除所有记录而不删除id为1800的一个寄存器.我想出了可能运行的3种类型的查询:
DELETE FROM table WHERE id > 1800
DELETE FROM table WHERE id <> 1800
DELETE FROM table WHERE id NOT IN (1800)
Run Code Online (Sandbox Code Playgroud)
我觉得第一个比其他人更快,但我不确定,因为所有其他数据的ID都大于1800.
哪一个更快,为什么?此外,如果有更快的方法删除不能删除的记录,请告诉我.
大多数数据库中最快的方法是:
不可否认,由于触发器,约束和权限,这可能无法实现.在许多数据库中,您可以通过修改(2)截断表而不是删除表来执行类似的操作.
至于你的原始问题,实际删除行的开销和与它们相关的数据将主导查询.你如何进行比较是无关紧要的.
示例代码
create temp table saved as
select * from t where id = 1800
truncate table t
insert into t
select * from saved
Run Code Online (Sandbox Code Playgroud)
我不确定临时表的Postgres命名约定,但这是个主意.
| 归档时间: |
|
| 查看次数: |
28848 次 |
| 最近记录: |