我的下面的sql语句最多运行5分钟。当我向它添加任何连接时,sql语句会一直运行直到超时。我想知道你是否可以让我知道为什么添加到sql语句导致这个?这些是我添加到基本SQL的连接:
将此语句添加到Base SQL
inner join ahsrelate.dbo.ahs_encounter ahs_encounter_1
on AHS_Encounter_1.PatientID=AHS_Patient.ID
或者将此语句添加到基本SQL
inner join AHS_Medication
on ahs_medication.patientid=AHS_Patient.ID
基本SQL
SELECT distinct
AHS_Patient.FullName,
AHS_Patient_Iorg.OrganizationMrn,
AHS_Patient.SexName,
AHS_Patient.DateOfBirth,
Finding1.NumericResult,
Finding2.NumericResult,
AHS_Problem.ICD9DiagnosisCode,
AHS_Encounter.EncounterDTTM,
AHS_Encounter.EncounterTypeName,
AHS_Result.EntryCode,
AHS_Result_1.EntryCode,
AHS_Result.NumericResult,
AHS_Result_1.NumericResult,
AHS_Result.ClinicalDTTM,
AHS_Result_1.ClinicalDTTM,
AHS_Provider.FullName,
AHS_Problem.Problem,
AHS_Problem.ProblemStatusName,
AHS_Encounter.ApptLocationName,
AHS_Encounter.AppointmentStatusName
FROM AHSRelate.dbo.AHS_Patient AHS_Patient
INNER JOIN AHSRelate.dbo.Finding1 Finding1
ON AHS_Patient.ID=Finding1.PatientID
AND Finding1.EntryMnemonic='BP SYS'
INNER JOIN AHSRelate.dbo.Finding2 Finding2
ON AHS_Patient.ID=Finding2.PatientID
AND Finding2.EntryMnemonic='BP DIAS'
INNER JOIN AHSRelate.dbo.AHS_Result AHS_Result
ON AHS_Patient.ID=AHS_Result.PatientID
AND AHS_Result.EntryCode IN ('D5353078', 'Q25015900')
INNER JOIN AHSRelate.dbo.AHS_Result AHS_Result_1
ON AHS_Patient.ID=AHS_Result_1.PatientID
AND AHS_Result_1.EntryCode IN ('D5353037', 'Q25003000')
INNER JOIN AHSRelate.dbo.AHS_Encounter AHS_Encounter
ON AHS_Encounter.PatientID=AHS_Patient.ID
AND AHS_Encounter.AppointmentStatusName='Pending'
AND AHS_Encounter.EncounterTypeName='Appointment'
and AHS_Encounter.EncounterDTTM >= getdate()-1
and AHS_Encounter.EncounterDTTM <= getdate()+1
INNER JOIN AHSRelate.dbo.AHS_Problem AHS_Problem
ON AHS_Patient.ID=AHS_Problem.PatientID
INNER JOIN AHSRelate.dbo.AHS_Patient_Iorg AHS_Patient_Iorg
ON AHS_Patient.ID=AHS_Patient_Iorg.PersonID
inner JOIN AHSRelate.dbo.AHS_Provider AHS_Provider
ON AHS_Encounter.Provider2ID=AHS_Provider.ID
ORDER BY
AHS_Patient.FullName,
AHS_Result.ClinicalDTTM DESC,
AHS_Result_1.ClinicalDTTM DESC
答案 0 :(得分:1)
我在不知道您的数据结构细节的情况下猜测,但我根据自己以前与医疗保健数据库的工作进行了有根据的猜测。我看看这个,然后查看你的查询:
inner join AHS_Medication
on ahs_medication.patientid=AHS_Patient.ID
首先想到的是,你有一个患者,可能有多个问题,多次遭遇,多种药物治疗,结果就是你把一些不相关的东西加在一起,从而产生远记录多于有意义。 5分钟对于查询来说已经很长时间了,我敢打赌药物表相对来说非常巨大,因此您将大大增加运行时间。
考虑你的病人:
Patient1
Patient2
Patient3
加入遭遇(假设每位患者有两次遭遇):
Patient1 Encounter1
Patient1 Encounter2
Patient2 Encounter3
Patient2 Encounter4
Patient3 Encounter5
Patient3 Encounter6
这很好,但是你加入了药物,这些药物要么不在同一层次结构中,要么你遗漏了将药物与处方药物相关的加入标准(药物,患者和药物治疗)。 EncounterWhichPrescibed)。如果Patient1有三种药物,每次遭遇都会重复,因为Encounter和Medication之间没有关系(或者至少你没有在加入标准中使用它)。
Patient1 Encounter1 MedicationA
Patient1 Encounter1 MedicationB
Patient1 Encounter1 MedicationC
Patient1 Encounter2 MedicationA
Patient1 Encounter2 MedicationB
Patient1 Encounter2 MedicationC
Patient2 Encounter3 MedicationD
Patient2 Encounter3 MedicationE
Patient2 Encounter3 MedicationF
Patient2 Encounter4 MedicationD
Patient2 Encounter4 MedicationE
Patient2 Encounter4 MedicationF
Patient3 Encounter5 MedicationG
Patient3 Encounter5 MedicationH
Patient3 Encounter5 MedicationI
Patient3 Encounter6 MedicationG
Patient3 Encounter6 MedicationH
Patient3 Encounter6 MedicationI
这种问题也可能发生在其他连接上,因此每个非感性连接都会在几何上增加运行时间(即5分钟可以通过单个连接轻松地进入50分钟)。