有一个表dept_index,是这样的
dept_id
dept_path
index_id
index_value
report_date
其中dept_path记录了部门的层级关系,/p1/p2/p3/ 这样的字符串,表示上级部门的列表
0表示是最上级机构。
现在要统计每个机构包含下级机构的每日数据汇总
select
t1.dept_id,
t1.index_id,
sum(t2.index_value),
t1.report_date
from
dept_index t1
left join dept_index t2 on
(t1.dept_id=t2.dept_id or t2.dept_path like concat('%/',t1.dept_id,'/%
'))
and t1.index_id = t2.index_id
and t1.report_date = t2.report_date
group by
t1.dept_id,
t1.index_id,
t1.report_date
;
大概1w个左右部门(包括父子部门)。mysql算一晚上没算出来。 加了where
t1.dept_path='0' 只算最上级机构的也不行。
后来用pgloader把mysql导入到pgsql,不到20分钟算出来了。
同样的服务器,同样的索引,mysql还进行了相关优化。
--
FROM 119.139.196.*