注册

流程引擎 activiti5慢,带有is null条件的语句非常慢

道荣 2024/09/21 405 1

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
DM Database Server 64 V8
DB Version: 0x7000c
【操作系统】:
【CPU】:
【问题描述】*:activiti 5 流程引擎中带有 is null 的语句非常慢, 语句如下

select * from ACT_RU_VARIABLE where EXECUTION_ID_ = '35245043' and TASK_ID_ is null

ACT_RU_VARIABLE 的数据量 只有 不到 30万条

select count(*) from ACT_RU_VARIABLE; -- 248608

表结构如下

CREATE TABLE "ACT_RU_VARIABLE" ( "ID_" NVARCHAR(64) NOT NULL, "REV_" NUMBER(38,0), "TYPE_" NVARCHAR(255) NOT NULL, "NAME_" NVARCHAR(255) NOT NULL, "EXECUTION_ID_" NVARCHAR(64), "PROC_INST_ID_" NVARCHAR(64), "TASK_ID_" NVARCHAR(64), "BYTEARRAY_ID_" NVARCHAR(64), "DOUBLE_" NUMBER(38,10), "LONG_" NUMBER(19,0), "TEXT_" NVARCHAR(2000), "TEXT2_" NVARCHAR(2000)); CREATE OR REPLACE INDEX "ACT_IDX_VARIABLE_TASK_ID" ON "ACT_RU_VARIABLE"("TASK_ID_" ASC); CREATE OR REPLACE INDEX "ACT_IDX_VAR_EXE" ON "ACT_RU_VARIABLE"("EXECUTION_ID_" ASC); CREATE OR REPLACE INDEX "ACT_IDX_VAR_BYTEARRAY" ON "ACT_RU_VARIABLE"("BYTEARRAY_ID_" ASC); CREATE OR REPLACE INDEX "ACT_IDX_VAR_NAME" ON "ACT_RU_VARIABLE"("NAME_" ASC); CREATE OR REPLACE INDEX "ACT_IDX_VAR_PROCINST" ON "ACT_RU_VARIABLE"("PROC_INST_ID_" ASC);

执行计划如下

1   #NSET2: [11, 155, 534] 
2     #PRJT2: [11, 155, 534]; exp_num(13), is_atom(FALSE) 
3       #SLCT2: [11, 155, 534]; ACT_RU_VARIABLE.EXECUTION_ID_ = '35245043'
4         #BLKUP2: [11, 6215, 534]; ACT_IDX_VARIABLE_TASK_ID(ACT_RU_VARIABLE)
5           #SSEK2: [11, 6215, 534]; scan_type(ASC), ACT_IDX_VARIABLE_TASK_ID(ACT_RU_VARIABLE), scan_range[NULL,NULL]

看执行计划是 使用了 task_id 索引, 而没有使用 execution_id 的索引,

是否有办法让这种带有 is_null 条件的按照使用其他条件的索引?

我理解这里应该使用 execution_id 的索引, 而不应该使用 task_id 的索引

已解决:
可能是统计信息错误,原执行计划错误, 更新统计信息
STAT 100 ON ACT_RU_VARIABLE(EXECUTION_ID_);
SP_CLEAR_PLAN_CACHE();

回答 0
暂无回答
扫一扫
联系客服