パフォーマンス上の問題を初めて抱えています。だから、私のアプローチが何をすべきかはわかりません。ハッシュ照合右外部結合でSQL Serverのパフォーマンスの問題を改善する方法
これは実行に7分以上かかるクエリです。
INSERT INTO SubscriberToEncounterMapping(PatientEncounterID, InsuranceSubscriberID)
SELECT
PV.PatientVisitId AS PatientEncounterID,
InsSub.InsuranceSubscriberID
FROM
DB1.dbo.PatientVisit PV
JOIN
DB1.dbo.PatientVisitInsurance PVI ON PV.PatientVisitId = PVI.PatientVisitId
JOIN
DB1.dbo.PatientInsurance PatIns on PatIns.PatientInsuranceId = PVI.PatientInsuranceId
JOIN
DB1.dbo.PatientProfile PP On PP.PatientProfileId = PatIns.PatientProfileId
LEFT OUTER JOIN
DB1.dbo.Guarantor G ON PatIns.PatientProfileId = G.PatientProfileId
JOIN
Warehouse.dbo.InsuranceSubscriber InsSub ON InsSub.InsuranceCarriersID = PatIns.InsuranceCarriersId
AND InsSub.OrderForClaims = PatIns.OrderForClaims
AND ((InsSub.GuarantorID = G.GuarantorId) OR (InsSub.GuarantorID IS NULL AND G.GuarantorId IS NULL))
JOIN
Warehouse.dbo.Encounter E ON E.PatientEncounterID = PV.PatientVisitId
実行計画は
ハッシュマッチ右外側はそのコスト89%、クエリの
に参加していると述べています。
右外側には、問題がどこにあるか私は見ていないので、クエリに参加ありません。
まず:
Guarantor
から私は、あなたが.....また、列のあなたの 'SELECT'リストに使用' InsSub'エイリアスを使用して、あなたの文で任意のテーブルが表示されない:あなたを行います*本当に*この2つの情報だけを得るためには、すべてのテーブルに参加する必要がありますか? –ハッシュ一致の詳細を表示できますか?プローブとは何ですか、出力は何ですか?スクリーンショットからは明らかではありません。私は、この述語があなたの問題を引き起こしていると推測します。 '(InsSub.GuarantorID = G.GuarantorId)OR(InsSub.GuarantorID IS NULLとG.GuarantorId IS NULL)'では、2つのクエリを使用して、このような 'OR'述部があると、最適ではない計画になり、2つの別々の照会が索引をよりうまく利用できるようになります。 – GarethD
@GarethDおそらく、where節でEXISTSを使用するのではなく、joinの2つの述語を使うのでしょうか? – dfundako