为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:0x7000d
【操作系统】:centos
【CPU】:R7 7840HS
【问题描述】*:
现有两张表
1.sys_student
字段:student_id、stu_json、school_id(虚拟列,由stu_json解析得来)...
索引:school_id
2.sys_school
字段:school_id、school_name...
主键索引:school_id
问题:实体字段和虚拟字段的索引是否在关联查询有较大区别,从而影响效率?
几个sql效率有区别,具体如下:
执行耗时:2730ms
SELECT
stu.school_id
FROM
sys_student stu
INNER JOIN sys_school sch ON stu.school_id = sch.school_id
WHERE
stu.school_id = 2003023234015036573
执行计划
执行耗时3ms
SELECT
stu.school_id
FROM
sys_student stu
INNER JOIN sys_school sch ON stu.school_id = sch.school_id
WHERE
stu.school_id = 2003023234015036573
and sch.school_id = 2003023234015036573
执行计划
新增reality_school_id字段,为实体列,值与school_id相同,x新增reality_school_id字段索引
执行耗时3ms
select
stu.school_id as school_id
from
sys_student stu
inner join sys_school sch on stu.reality_school_id = sch.school_id
where
stu.reality_school_id = 2003023234015036573
执行计划

2点很关键
sys_student.school_id数据类型是什么,建议把2个表结构和JSON派生表达式也给出来~这里重点关注的是数据类型可能不一样引起转换导致执行计划不理想,从第2个例子可以看到指定了了条件stu.school_id = 2003023234015036573 and sch.school_id = 2003023234015036573后还有exp_cast操作可以确定类型肯定不一致