3
SELECT familyname 
FROM dtoohey.patient, DTOOHEY.account, dtoohey.doctor 
WHERE dtoohey.account.patientID = dtoohey.patient.patientid 
  AND dtoohey.doctor.providerno = DTOOHEY.account.providerno 
  AND dtoohey.doctor.name = 'Dr Brian';

SELECT familyname 
FROM dtoohey.patient 
WHERE patientid IN (
          SELECT patientid 
          FROM dtoohey.account 
          WHERE providerno IN (
              SELECT providerno 
              FROM dtoohey.doctor 
              WHERE name = 'Dr Brian'
          )
);

これら2つの違いは何ですか?どちらも異なる結果になります。

4

2 に答える 2

1

ほとんどの場合、結合はサブクエリよりも高速ですが、常にではありません。数日前に、7 つの結合があり、実行時間が約 50 秒かかるという問題に直面しました。2 つの結合をサブクエリに置き換えました (2 つの結合は、が遅延の原因であると疑われます)、1 秒に短縮されました。

ここにあなたを助けるいくつかのリンクがあります:

  1. 結合とサブクエリ
  2. いつどれを使うか
于 2013-08-27T06:17:30.697 に答える
1

実行計画の主な違い。このクエリはより効果的である可能性があります-

SELECT familyname
FROM dtoohey.patient p
WHERE EXISTS(
    SELECT 1 
    FROM dtoohey.account a
    JOIN dtoohey.doctor d ON d.providerno = a.providerno
    WHERE a.patientID = p.patientid
        AND d.Name = 'Dr Brian'
)
于 2013-08-27T06:06:39.400 に答える