Mysql查询真的很慢。如何提高查询速度?

时间:2016-02-09 11:47:49

标签: mysql sql performance mysql-workbench

我想为我的病人提供最新结果。以下sql在mysqlworkbench中 87秒之后返回69,000个结果。我做了两个' date'和' patientid'列作为索引。

select Max(date) as MaxDate, PatientID 
from assessment
group by PatientID

我认为我的桌子总共约有440,000张。是因为我的桌子很大吗?

有没有办法提高此查询的速度,因为我必须将此查询嵌入其他查询中。例如,如下所示:

select aa.patientID, assessment.Date, assessment.result
from assessemnt
inner join
    (select Max(date) as MaxDate, PatientID 
    from assessment
    group by PatientID) as aa
on aa.patientID = assessment.patientID and aa.MaxDate = assessment.Date

以上将给出每位患者的最新评估结果。然后我还会嵌入这段代码来做其他事情......所以我真的需要加快速度。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我想知道这个版本是否会有更好的性能与正确的索引:

select a.patientID, a.Date, a.result
from assessemnt a
where a.date = (select aa.date
                from assessment aa
                where aa.patientID = a.patientID
                order by aa.date desc
                limit 1
               );

然后你需要assessment(patientID, date)上的索引。

编辑:

另一种方法是使用assessment(patient_id, date, result)上的索引:

select a.*
from (select a.patient_id, a.date, a.result,
             (@rn := if(@p = a.patient_id, @rn + 1,
                        if(@p := a.patient_id, 1, 1)
                       )
             ) as rn
      from assessment a cross join
          (select @p := -1, @rn := 0) params
      order by patient_id desc, date desc
     ) a
where rn = 1;