为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8
【操作系统】:linux
【CPU】:
【问题描述】:
以下sql, 在200万数据的时候执行group操作统计数量需要耗时 30多秒.
如果不使用group, 去掉count(). 仅仅耗时3秒.
这个group操作sql中还能不能优化?
select
temp.CODE AS code,
temp.NAME AS name,
count(*)
from (
select
IFNULL(LEVEL, 0) LEVEL
from
EMPLOYEE
where DATE = '2025-02-04'
and FULL_PATH LIKE CONCAT('3024000871', '%')
) employee
LEFT JOIN (
select
temp.CODE ,
temp.NAME ,
metricConfig.VALUE
from CONFIG metricConfig
LEFT JOIN DIMENSIONS temp
ON metricConfig.CODE = temp.CODE
AND metricConfig.CRITERIA = 'LEVEL'
) temp
ON employee.LEVEL = temp.VALUE
group by temp.CODE, temp.NAME
在select后面加个hint enable_hash_join(0) 看下效果 这样
有group by 和集函数相当于要处理所有的结果集,您去掉了group by 和集函数的sql查询的时候有分页机制只返回前100行
可以考虑使用et查看具体操作符消耗后进行针对优化处理,目前看来有两点问题:
1、IDEX_ODA_EMPLOYEExxxx表的索引不够好,存在回表额外消耗。
2、其余两张表的left join 并没有走向有效索引,需要根据过滤条件建立合适索引。