为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:windows11
【CPU】:
【问题描述】*:有SQL:
SELECT count(person.id)
FROM ( SELECT t2.*
FROM ( SELECT person_id,
max(modify_time) AS modify_time
FROM ehr_org_person_history
WHERE org_id = '8876686154421706446'
AND modify_time<= '2024-12-09 23:59:59.999'
GROUP BY person_id ) AS t1
INNER JOIN ehr_org_person_history AS t2
ON t1.modify_time = t2.modify_time
AND t1.person_id = t2.person_id) as person
WHERE person.org_id in ('8876686154421706446')
and person.is_outer = 0
and person.del_flag = 1
and person.state in (1,2,4);
数据量有370000+数据
以创建复合索引 org_id,modify_time,person_id
et为:
执行计划为:
结果为:26002,但耗时为2s多。
索引回表消耗代价过多。走全表可能比索引要好。
加个/+ ORDER(t2,t1) /试试,让t2做驱动表。
或者/+no_use_nl(t1,t2)/试试。
你加hint不走这个索引看会不会快一点