[英]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.