我有一张桌子,我需要在不中断服务的情况下清理。大约99.99%的数据应该被删除,所以我尝试重新创建表,并将0.01%的usefull数据移动到新表中,如下所示(稍后我将截断旧表):
BEGIN ISOLATION LEVEL SERIALIZABLE;
LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE;
/* I rename the old table */
ALTER TABLE table1 RENAME TO table1_to_be_deleted;
/* And I recreate the table */
CREATE T
我必须更新一个大表(600米行)中的大约300行,并且我正在努力使它更快。
我使用的查询有点棘手:
UPDATE my_table
SET name = CASE WHEN (event_name in ('event_1', 'event_2', 'event_3'))
THEN 'deleted' ELSE name END
WHERE uid IN ('id_1', 'id_2')
我试着在这个查询中使用“解释”,我得到:
XN Seq Scan on my_table (cost=0.0
在单个表上有一个不同的查询。
select distinct d, e, f, a, b, c from t where a = 1 and e = 2;
在cols a,b,c中的不同值的个数高(高列基数),而cols d,e,f是低基数列。我的数据是S3格式的ORC格式,我在雅典娜和红移谱中有外部表指向同一个文件。
当上面的查询在雅典娜中运行时,它会在几秒内返回,而在红移谱中则需要几分钟。
但是当我移到选择列表的末尾时,它在红移光谱中也能很好地工作。这种情况只发生在这个特定的列中,我的意思是在结尾移动d或e不会有任何区别,即它们运行的时间更长。col和其他列一样是varchar列,该列的最