请教一个问题
假设有如下表
家庭表:家庭住址,家庭所在的省、市、区县、乡镇、村,家庭人数 其他字段
家庭详细:是否有电视、是否有厕所、是否有田、水田、旱田、水田的亩数、旱田的亩数 其他字段
家庭成员:成员名称、性别、出生日期 等等
家庭成员教育经历:开始时间、结束时间、学历
家庭与家庭详细信息一对一
家庭与家庭成员一对多,一个家有多个成员
家庭成员与教育经历一对多,例如 小学、初中、高中、大学等等
现在有如下需求,查询 XX 县,家里有电视、家庭成员包括姓张的,上过初中的,最终以家庭为单位展示数据,按照家庭人数排序
伪 sql
select
家庭.*
from
家庭
left join 家庭详细 on 家庭 = 家庭详细
left join 家庭成员 on 家庭 = 家庭成员
left join 家庭成员教育经历 on 家庭成员教育经历 = 家庭成员
where
1=1
and 家庭.区县 = 'xxx'
and 家庭详细.电视 = 是
and 家庭成员.姓名 like '张%'
and 家庭成员教育经历.学历 = '初中'
group by
家庭.idorder by 家庭.家庭人数 desc
这个最终查出的数据大概有 5 万多,该加的索引都加了,现在这个 SQL 非常慢,count 一下 大概需要 20 多秒,
项目是 java 、mybatis Plus
请问该如何优化,已经没有思路了,最好能在代码逻辑或 sql 写法上进行优化
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/853653
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.