Mysql 当我们需要在条件稍有变化的情况下多次运行相同的查询时,如何减少服务器上的负载

Mysql 当我们需要在条件稍有变化的情况下多次运行相同的查询时,如何减少服务器上的负载,mysql,performance,server,load,Mysql,Performance,Server,Load,编辑 是否最好将所有查询合并到一个单一的select中,如select。。。作为q1,选择。。。作为第二季度 结束编辑 我需要为一年中的每个月运行相同的以下查询 每个查询之间的区别只是通过添加一个GROUPBY或删除一个sing条件 第一个问题:我需要计算完成的总访问量 SELECT count(*) from visit where visit_status='Active' AND month(visit.date_of_visit)=month

编辑

是否最好将所有查询合并到一个单一的select中,如select。。。作为q1,选择。。。作为第二季度

结束编辑

我需要为一年中的每个月运行相同的以下查询

每个查询之间的区别只是通过添加一个GROUPBY或删除一个sing条件

第一个问题:我需要计算完成的总访问量

SELECT 
    count(*)
from 
    visit 
where 
    visit_status='Active' 
AND 

    month(visit.date_of_visit)=month(:selectedDate)
AND
    year(visit.date_of_visit)=year(:selectedDate)
当然:selectedDate将由PHP中的绑定值设置

第二个查询:是关于计算未就诊的患者数量,只需按就诊添加组即可

然后我将使用rowCount获得结果,因为返回值是由于GROUPBY而产生的行

应重复相同的查询,但现在没有日期,这意味着自第一次在系统上注册数据后开始计数:

SELECT 
    count(*)
from 
    visit 
where 
    visit_status='Active' 

group by visit.patient_id
使用以下方法我没有遇到错误,但是有没有更好的方法来做到这一点,并通过最小化查询数量来减少服务器上的负载?

试试这个

select COUNT(distinct (visit.patient_id))  from visit where  visit_status='Active' 
假设patient_id不为空,则应将查询编写为:

select count(distinct v.patient_id)
from visit v
where v.visit_status = 'Active' and
      v.date_of_visit >= :selectedDate - interval (1 - day(:selectedDate)) day and
      v.date_of_visit < last_day(:selectedDate) + interval 1 day;
这是一种更好的查询编写方法,特别是在您关心性能的情况下:

这可以利用关于就诊状态、就诊日期、患者id的索引。 你只返回你真正想要的-即唯一患者的数量。 您可以删除日期上的where条件以获取所有日期。
您可以在计算机上进行分组client@schlonzo是否最好将所有查询合并到一个单一的select中,如select。。。作为q1,选择。。。作为q2?您在使用GROUP BY时不一致。这是一个拼写错误吗?不。如果没有group by,我将得到每月的就诊次数,比如说210次,如果group by,我将得到190名患者的确切人数
select count(distinct v.patient_id)
from visit v
where v.visit_status = 'Active' and
      v.date_of_visit >= :selectedDate - interval (1 - day(:selectedDate)) day and
      v.date_of_visit < last_day(:selectedDate) + interval 1 day;