gpt4 book ai didi

mysql - 执行 SQL JOIN 需要很长时间

转载 作者:行者123 更新时间:2023-11-29 11:41:15 25 4
gpt4 key购买 nike

我有三个表:患者、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

最佳答案

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

关于mysql - 执行 SQL JOIN 需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35748845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com