予期しない結果をもたらす非常に単純なクエリがあります。どこでトラブルシューティングを行うべきかについてのヒントは大歓迎です。
簡素化されたクエリは次のとおりです。
SELECT Obs.obsDate,
Obs.obsValue,
ObsHead.name
FROM ml.Obs Obs
JOIN ml.ObsHead ObsHead ON ObsHead.hdId = Obs.hdId
WHERE obs.hdId IN (53, 54)
これにより、クエリのコストは963になります。ただし、クエリを次のように変更すると:
SELECT Obs.obsDate,
Obs.obsValue,
ObsHead.name
FROM ml.Obs Obs
JOIN ml.ObsHead ObsHead ON ObsHead.hdId = Obs.hdId
WHERE ObsHead.name IN ('BP SYSTOLIC', 'BP DIASTOLIC')
同じデータが返されるはずですが、推定コストは17688まで跳ね上がります。ここでの問題はどこにある可能性が高いですか? ありがとう。
編集:クエリ プランによると、インデックスObsHead.Name
は範囲スキャンに使用され、ObsHead のテーブル アクセスのコストは 4 です。別のインデックスがObs.hdId
レンジ スキャンに使用されており、コストは 94 です。それは、テーブル間のネストされたループ結合です。 17K までジャンプします。