执行SQL JOIN需要很长时间

时间:2016-03-02 13:39:23

标签: mysql sql join

我有三张桌子:患者,obg和医生

请帮助我理解为什么花了这么多时间(超过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

1 个答案:

答案 0 :(得分:1)

我可以建议这样的东西,通过使用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 OR和你有一些小问题。你应该在这些地方使用括号,以确保它遵循你的逻辑,就像我的回答

相关问题