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

具有多个左连接的mysql查询需要大量时间来获取数据,mysql,datatable,Mysql,Datatable,我使用mysql select查询从多个表中获取行以生成报告 随着行数的增加,获取需要花费大量时间 我发现使用左连接会使查询变慢 可以使用什么替代方法使查询执行更快 下面是我正在使用的查询。查询结果是一个报告,根据患者年龄和疾病类型给出患者计数 例如:疾病是病毒性发热,而本月0至15岁的男性、0至15岁的女性、16至45岁的男性、16至45岁的女性患者的数量是多少 查询: SELECT ds.disease_type as disease, SUM(C

我使用mysql select查询从多个表中获取行以生成报告

随着行数的增加,获取需要花费大量时间

我发现使用左连接会使查询变慢

可以使用什么替代方法使查询执行更快

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

例如:疾病是病毒性发热,而本月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

如何更改查询,以便使用所有连接,并且不会占用太多时间。

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

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

您可以在我们可以阅读它的方式???,现在不可能阅读它。你可以格式化吗?是的,我已经格式化了。请检查你是否正确索引了你的数据库?不,我没有使用索引。你可以用我们可以阅读的方式格式化你的查询吗???,现在不可能阅读它。你可以格式化吗,请?是的,我已经格式化了。请检查您是否为数据库编制了正确的索引?否,我没有使用索引,或者我没有得到您想要说的内容。我的意思是,如果您将查询表示为MySQL视图:,然后从该视图中选择*对不起,我没有得到您想要说的内容。我的意思是,如果您将查询表示为MySQL视图:,然后从该视图中选择*