【发布时间】:2020-02-18 13:09:51
【问题描述】:
我正在使用 mysql 选择查询从多个表中获取行以生成报告。
随着行数的增加,获取需要花费大量时间。
我发现使用左连接会使查询变慢。
可以使用什么替代方法使查询执行得更快。
下面是我正在使用的查询。查询的结果是根据患者年龄和疾病类型给出患者数量的报告。
例如:疾病是病毒性发烧,比当月 0 到 15 岁男性、0 到 15 女性、16 到 45 男性、16 到 45 女性之间的患者人数是多少。
查询:
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
我可以通过什么方式更改查询,以便我可以使用所有连接并且不需要太多时间。
【问题讨论】:
-
您能否以我们可以阅读的方式格式化您的查询??,现在无法阅读它
-
请格式化一下好吗?
-
是的,我已经格式化了。请检查
-
您的数据库索引是否正确?
-
不,我没有使用索引