请查看以下发现。总之,由于ACTIVITI V6.0表中定义的数据类型,问题出在查询本身。
在ACTIVITI V6.0 DB上进行了以下测试现有查询用时9分53秒(50个eDTU(!
select *
from ACT_RU_VARIABLE
where EXECUTION_ID_ = 10000074
and NAME_= 'abccd'
and TASK_ID_ is null;
新查询用了3毫秒(50个eDTU(!未创建索引。
select *
from ACT_RU_VARIABLE
where EXECUTION_ID_ = '10000074'
and NAME_= 'abccd'
and TASK_ID_ is null;
既然DB表和查询是由Actiti自己管理的,你们能建议一下应该如何解决这个问题吗?
我们曾想过更改数据类型,但我们不确定这将如何影响Actiti的功能工作流,因此希望了解您的见解。
我真的不确定我是否理解你的问题。V6的Activiti模式由Mybatis ORM控制。这里的模式创建脚本:https://github.com/Activiti/Activiti/blob/6.x/modules/activiti-engine/src/main/resources/org/activiti/db/create/activiti.mysql.create.engine.sql明确表示EXECION_ID_字段是Varchar。
create table ACT_RU_VARIABLE (
ID_ varchar(64) not null,
REV_ integer,
TYPE_ varchar(255) not null,
NAME_ varchar(255) not null,
EXECUTION_ID_ varchar(64),
PROC_INST_ID_ varchar(64),
TASK_ID_ varchar(64),
BYTEARRAY_ID_ varchar(64),
DOUBLE_ double,
LONG_ bigint,
TEXT_ varchar(4000),
TEXT2_ varchar(4000),
primary key (ID_)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
变量实例的MyBatis映射如下:
https://github.com/Activiti/Activiti/blob/6.x/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/VariableInstance.xml
同样,查询使用字符串。
那么,为什么要使用字符串以外的任何东西来查询EXECION_ID_呢?
至于如何处理,使用像Mybatis这样的ORM的美妙之处在于,更改或扩展模式相对容易。您所需要做的就是更新相应的mapping.xml、crate/drop脚本和相关的Entity。