У меня очень простой запрос, который дает неожиданные результаты. Мы будем рады получить подсказки о том, где искать неисправности.
В упрощенном виде запрос выглядит так:
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 : это соединение вложенных циклов между таблицами, которое увеличивается до 17К.
EXPLAIN PLAN
для обоих запросов? - person Guru   schedule 11.03.2010