【发布时间】:2019-09-17 09:13:16
【问题描述】:
我在 aws-redshift 上执行了一个删除的 sql,它已经执行了几个小时但仍未完成。
我尝试将 VACUUM 表进行 100% 排序,但这没有任何意义。
错误的 sql 是:
delete from tmp_table
using my_table
where (my_table.id = tmp_table.id)
and (not true);
我交换了这两张表,它仍然挂起。
delete from my_table
using tmp_table
where (my_table.id = tmp_table.id)
and (not true);
我什至交换了条件的位置,将not true替换为false,不起作用。
最后发现这条sql也挂了:
delete from tmp_table using my_table where false;
我还执行了一些其他的 sql,它们运行得非常快:
select count(*) from tmp_table
join my_table
on (my_table.id = tmp_table.id)
and (not true);
delete from my_table
using tmp_table
where (my_table.id = tmp_table.id)
and (true);
我知道我不需要执行删除 sql,因为条件始终为 false,它什么也不删除。我只是想知道什么会导致sql挂起。
【问题讨论】:
-
你删除了多少行?删除可能非常昂贵,尤其是在列式数据库中。
-
通常在 Redshift 上删除的更好方法是选择您想要的行到一个新表中,删除或重命名原始表,然后使用原始表重命名新表名称,即替换它。不要忘记,一旦您在 Redshift 上执行了大量删除操作,您还需要对表进行 VACUUM。
标签: sql database amazon-redshift