繁体   English   中英

执行SQL JOIN需要很长时间

[英]Executing SQL JOIN Takes To Long

我有三张桌子: 病人,妇产科医生和医生

请帮助我了解为什么要花费这么多时间(超过1分钟)。 当我不使用searchtxt时,我得到的时间更少了,但是,如果我在某些字段中使用searchtxt,则在检索结果时会遇到延迟。

SELECT 
            a.ID AS Pt_ID,
            a.Pt_Name,
            a.Pt_Sex,
            Date_Format(a.Pt_DOB,'%Y/%m/%d') as Pt_DOB,
            a.Pt_Age,
            a.Pt_Opt_HrF,
            a.Pt_HrF_Name,
            a.Pt_Mobile,
            a.Pt_Address,
            b.ID as R_ID,
            Date_Format(b.RP_DATE,'%Y/%m/%d') as RP_DATE,
            b.B_HISTORY,
            b.Ref_Dr_ID,
            Date_Format(b.LMP,'%Y/%m/%d') as LMP,
            b.H_O_G,
            b.P_U_S,
            b.RP_TY,
            b.Ref_Dr_ID,
            c.Dr_Name
 FROM  
    patient a,
    obg b,
    doctor c 
where 

    a.DEL_FLG='N' and b.DEL_FLG='N' and 
    (b.RP_DATE BETWEEN STR_TO_DATE('".$_POST['frm_dt']."', '%Y/%m/%d') AND STR_TO_DATE('".$_POST['to_dt']."', '%Y/%m/%d')) and 
   a.ID  LIKE '%".$_POST['searchtxt']."%'
OR b.ID  LIKE '%".$_POST['searchtxt']."%'      
OR a.Pt_Name  LIKE '%".$_POST['searchtxt']."%' 
OR a.Pt_DOB = STR_TO_DATE(".$_POST['searchtxt'].",'%Y/%m/%d')
OR a.Pt_Address LIKE '%".$_POST['searchtxt']."%'
OR a.Pt_HrF_Name LIKE '%".$_POST['searchtxt']."%'
OR a.Pt_Mobile LIKE '%".$_POST['searchtxt']."%' 
a.ID = b.Pt_ID and 
    b.Ref_Dr_ID = c.ID 
order by b.CRTD_DT Desc

我可以建议这样的事情,通过使用concat函数,您可以只使用一次而无需使用OR-将查询更改为这样的事情:

SELECT  *
FROM  
    patient a,
    obg b,
    doctor c 
where 
    a.DEL_FLG='N' and b.DEL_FLG='N'
    AND (b.RP_DATE BETWEEN STR_TO_DATE('".$_POST['frm_dt']."', '%Y/%m/%d') AND STR_TO_DATE('".$_POST['to_dt']."', '%Y/%m/%d')) 
    AND (concat(b.id,'-',a.id,'-',a.Pt_Name,'-',a.Pt_Address,'-',
           a.Pt_HrF_Name,'-',a.Pt_Mobile) LIKE  '%".$_POST['searchtxt']."%'
    OR a.Pt_DOB = STR_TO_DATE(".$_POST['searchtxt'].",'%Y/%m/%d')) 
    AND a.ID = b.Pt_ID  
    AND b.Ref_Dr_ID = c.ID 
order by b.CRTD_DT Desc

另外,我认为您在使用AND或AND时有一些小问题。您应该在此位置使用括号以确保其遵循您的逻辑,例如我的回答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM