为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:麒麟V10
【CPU】:
【问题描述】*:delete or 不走索引,单条删除很快,超过2条就要全表扫描,WHERE条件的字段有聚簇索引。
改写下试试呢,类似于
DELETE FROM "DMHEPS"."ENTRY_DOCU"
WHERE ENTRY_ID = '223120260004886838'
AND (
(DOCU_TYPE='0000001' AND DOCU_CODE='22310000001SW00000004281484805.P')
OR (DOCU_TYPE='1000001' AND DOCU_CODE='20262243617962271')
OR (DOCU_TYPE='315' AND DOCU_CODE='TASU26127')
);
这里要DELETE的数据一共是多少条
添加hint ENABLE_IN_VALUE_LIST_OPT(0)解决
达梦默认会将多组 AND 条件 OR 连接自动转化为多列 IN VALUE LIST,该优化在部分版本导致执行计划走索引全扫描 SSCN;增加 hint ENABLE_IN_VALUE_LIST_OPT(0) 关闭 IN LIST 优化,阻止 OR 转 IN,优化器采用 UNION FOR OR,拆分为多次主键唯一查找 CSEK UNIQUE,精准定位行,性能恢复正常。
