为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:sql如下:```DELETE FROM "Job" WHERE "Id" IN (select "Id" FROM "Job" WHERE "Id"<500 and "StateName" ='Succeeded' ) ;
执行计划如下:
```language
DELETE:[0, 0, 0]; table(Job), type(select), mpp_opt(0), hp_opt(0)
TEMP TABLE SPOOL:[16, 252, 68]; for_mdis(FALSE); is_atom(FALSE)
PRJT2:[16, 252, 68]; exp_num(2), is_atom(FALSE)
HASH2 INNER JOIN:[16, 252, 68]; RKEY_UNIQUE KEY_NUM(1); KEY(DMTEMPVIEW_904959552.colname=Job.Id) KEY_NULL_EQU(0)
NEST LOOP INDEX JOIN2:[16, 252, 68]
ACTRL:[16, 252, 68]
PRJT2:[15, 252, 52]; exp_num(1), is_atom(FALSE)
SLCT2:[15, 252, 52]; Job.Id < 500
BLKUP2:[15, 5045, 52]; INDEXSTATE(Job)
SSEK2:[15, 5045, 52]; scan_type(ASC), INDEXSTATE(Job), scan_range['Succeeded','Succeeded'], is_global(0)
SSEK2:[1, 1, 4]; scan_type(ASC), INDEX33556519(Job), scan_range[DMTEMPVIEW_904959552.colname,DMTEMPVIEW_904959552.colname], is_global(0)
SSCN:[21, 201835, 16]; INDEX33556519(Job); btr_scan(1); is_global(0)
我在Job表上有Id(主键) 索引,也有StateName 索引。
为何删除特别慢?这个执行计划为何是全表扫描?
ID是主键的话,测试下直接删除是否能快一点
DELETE
FROM "Job"
WHERE "Id"<500
AND "StateName" ='Succeeded';
可以确定这个表目前只有我这一个会话使用,不会有其他的锁