首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个左连接的mysql查询需要花费大量时间来获取数据

具有多个左连接的mysql查询需要花费大量时间来获取数据
EN

Stack Overflow用户
提问于 2019-10-22 19:33:10
回答 1查看 55关注 0票数 1

我正在使用mysql select query从多个表中提取行以生成报告。

随着行数的增加,获取数据需要很长时间。

我发现使用left join会使查询变慢。

有什么替代方法可以让查询执行得更快。

下面是我正在使用的查询。查询的结果是根据患者的年龄和疾病类型给出患者计数的报告。

例如:疾病是病毒性发热比当月,0- 15岁的男性,0- 15岁的女性,16- 45岁的男性,16- 45岁的女性患者的数量是多少。

查询:

代码语言:javascript
运行
复制
    SELECT 
        ds.disease_type as disease, 
        SUM(CASE WHEN (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' THEN 1 ELSE 0 END) as patient_count, 
        SUM(CASE WHEN ((DATE_FORMAT(pdm.visited_date, '%Y-%m-%d')) BETWEEN '2019-04-01' AND '2020-03-01') THEN 1 else 0 end) as disease_morbidity_cumulative_no,
        SUM(case when ic.age BETWEEN 0 AND 15 AND ic.gender ='male' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count1_male, 
        SUM(case when ic.age BETWEEN 0 AND 15 AND ic.gender ='female' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count1_female, 
        SUM(case when ic.age BETWEEN 16 AND 45 AND ic.gender ='male' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count2_male, 
        SUM(case when ic.age BETWEEN 16 AND 45 AND ic.gender ='female' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count2_female, 
        SUM(case when ic.age >45 AND ic.gender='male' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count3_male, 
        SUM(case when ic.age >45 AND ic.gender='female' AND (DATE_FORMAT(pdm.visited_date, '%m-%Y'))='10-2019' then 1 else 0 end) as patient_age_count3_female 
    FROM (p_d_m pdm) 
        LEFT JOIN i_card ic ON ic.i_card_id = pdm.i_card_id
        LEFT JOIN disease ds ON ds.disease_id = pdm.disease_id 
        LEFT JOIN village v ON v.village_id = ic.village_id 
        LEFT JOIN phc p ON p.phc_id = v.phc_id 
        LEFT JOIN ind_card indc ON indc.ind_card_id = pdm.ind_card_id 
        LEFT JOIN block b ON b.block_id = p.block_id 
        LEFT JOIN sub_district s ON s.sub_district_id =b.sub_district_id 
        LEFT JOIN district d ON d.district_id = s.district_id 
    GROUP BY ds.disease_id

我可以以何种方式更改查询,以便可以使用所有的连接,并且不需要花费太多时间。

EN

回答 1

Stack Overflow用户

发布于 2019-10-22 20:32:19

为什么不将查询结果放在数据库视图中,然后从创建的视图中选择*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58503330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档