2013-02-13 5 views
0

최대 SQL 문 실행 시간은 5 분입니다. 조인을 추가 할 때 SQL 문은 시간이 초과 될 때까지 실행됩니다. SQL 문에 왜이 문제가 발생하는지 알려주시겠습니까? 다음은 제가 기본 SQL에 추가 한 조인은 다음과 같습니다추가 참가 속도가 느려짐

추가 된이 문 자료 SQL에

inner join ahsrelate.dbo.ahs_encounter ahs_encounter_1 
on AHS_Encounter_1.PatientID=AHS_Patient.ID 

또는

inner join AHS_Medication 
on ahs_medication.patientid=AHS_Patient.ID 
자료 SQL이 문을 추가

기본 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 
+3

어떤 DBMS를 사용하고 있습니까? 설명 플랜을 첨부 할 수 있습니까? 가입하고있는 열에 인덱스가 있습니까? –

+0

당신이 말하는 것은 성능 튜닝입니다. 사용하는 DBMS에 관계없이 stackoverflow 질문에 대한 대답의 맥락에서 쉽게 해결할 수없는 막대한 주제가 있습니다. 최선의 방법은 문제 영역이 귀하의 질의에 무엇인지 식별하도록하기 위해 설명 또는 실행 계획을 게시하는 것입니다. –

+0

Microsoft SQL을 사용하고 있습니다. 모든 조인에 인덱스가 있습니다. 나는 설명 계획을 세울 수 없었다. – QYT

답변

0

나는 당신의 데이터 구조의 세부 사항을 알지 못하고 추측하고 있지만, 건강 관리 데이터베이스와 내 자신의 이전 작업을 기반으로 추측을하고있다. 나는이보고 다음 쿼리를 보면 :

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 

이 괜찮습니다,하지만 당신은 하나하지에있는 약물 가입 동일한 위계 질서 또는 처방 된 Encounter에 약물을 관련시키는 조인 기준을 생략했습니다 (medication.PatientId & & medication.EncounterWhichPrescibed). Patient1에 세 가지 약물이있는 경우 Encounter와 Medication간에 관계가 없기 때문에 (또는 적어도 Join 조건에서 사용하지 않았기 때문에) 각 Encounter마다 중복 될 수 있습니다. 문제는 이런 종류의 다른 대해 발생 될 수

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 

뿐만 따라서 각 비도 sensical 조인 (즉. 5 분 용이하게 가입 한 50 회의록 행 수) 기하학적 런타임 증가 조인.

관련 문제